提交 54a60fd7 编写于 作者: D Dmitry Guryanov 提交者: Peter Krempa

parallels: refactor parallelsDomainDefineXML

First, we don't need to call prlsdkApplyConfig after
creating new VM or containers, because it's done in
functions prlsdkCreateVm and prlsdkCreateCt.

No need to check, if domain exists in the list after
prlsdkAddDomain.

Also organize code, so that we can call virObjectUnlock
in one place.
Signed-off-by: NDmitry Guryanov <dguryanov@parallels.com>
上级 66d89199
...@@ -661,10 +661,9 @@ static virDomainPtr ...@@ -661,10 +661,9 @@ static virDomainPtr
parallelsDomainDefineXML(virConnectPtr conn, const char *xml) parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
{ {
parallelsConnPtr privconn = conn->privateData; parallelsConnPtr privconn = conn->privateData;
virDomainPtr ret = NULL; virDomainPtr retdom = NULL;
virDomainDefPtr def; virDomainDefPtr def;
virDomainObjPtr olddom = NULL; virDomainObjPtr olddom = NULL;
virDomainObjPtr dom = NULL;
parallelsDriverLock(privconn); parallelsDriverLock(privconn);
if ((def = virDomainDefParseString(xml, privconn->caps, privconn->xmlopt, if ((def = virDomainDefParseString(xml, privconn->caps, privconn->xmlopt,
...@@ -689,34 +688,28 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml) ...@@ -689,34 +688,28 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
_("Unsupported OS type: %s"), def->os.type); _("Unsupported OS type: %s"), def->os.type);
goto cleanup; goto cleanup;
} }
dom = prlsdkAddDomain(privconn, def->uuid);
if (dom) olddom = prlsdkAddDomain(privconn, def->uuid);
virObjectUnlock(dom); if (!olddom)
else
goto cleanup; goto cleanup;
olddom = virDomainObjListFindByName(privconn->domains, def->name); } else {
if (!olddom) { if (prlsdkApplyConfig(conn, olddom, def))
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Domain for '%s' is not defined after creation"),
def->name ? def->name : _("(unnamed)"));
goto cleanup; goto cleanup;
}
}
if (prlsdkApplyConfig(conn, olddom, def) < 0) { if (prlsdkUpdateDomain(privconn, olddom))
virObjectUnlock(olddom); goto cleanup;
goto cleanup;
} }
virObjectUnlock(olddom);
ret = virGetDomain(conn, def->name, def->uuid); retdom = virGetDomain(conn, def->name, def->uuid);
if (ret) if (retdom)
ret->id = def->id; retdom->id = def->id;
cleanup: cleanup:
if (olddom)
virObjectUnlock(olddom);
virDomainDefFree(def); virDomainDefFree(def);
parallelsDriverUnlock(privconn); parallelsDriverUnlock(privconn);
return ret; return retdom;
} }
static int static int
......
...@@ -1258,7 +1258,7 @@ prlsdkAddDomain(parallelsConnPtr privconn, const unsigned char *uuid) ...@@ -1258,7 +1258,7 @@ prlsdkAddDomain(parallelsConnPtr privconn, const unsigned char *uuid)
return dom; return dom;
} }
static int int
prlsdkUpdateDomain(parallelsConnPtr privconn, virDomainObjPtr dom) prlsdkUpdateDomain(parallelsConnPtr privconn, virDomainObjPtr dom)
{ {
PRL_HANDLE job; PRL_HANDLE job;
......
...@@ -32,6 +32,7 @@ int ...@@ -32,6 +32,7 @@ int
prlsdkLoadDomains(parallelsConnPtr privconn); prlsdkLoadDomains(parallelsConnPtr privconn);
virDomainObjPtr virDomainObjPtr
prlsdkAddDomain(parallelsConnPtr privconn, const unsigned char *uuid); prlsdkAddDomain(parallelsConnPtr privconn, const unsigned char *uuid);
int prlsdkUpdateDomain(parallelsConnPtr privconn, virDomainObjPtr dom);
int prlsdkSubscribeToPCSEvents(parallelsConnPtr privconn); int prlsdkSubscribeToPCSEvents(parallelsConnPtr privconn);
void prlsdkUnsubscribeFromPCSEvents(parallelsConnPtr privconn); void prlsdkUnsubscribeFromPCSEvents(parallelsConnPtr privconn);
int prlsdkStart(parallelsConnPtr privconn, PRL_HANDLE sdkdom); int prlsdkStart(parallelsConnPtr privconn, PRL_HANDLE sdkdom);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册