提交 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
parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
{
parallelsConnPtr privconn = conn->privateData;
virDomainPtr ret = NULL;
virDomainPtr retdom = NULL;
virDomainDefPtr def;
virDomainObjPtr olddom = NULL;
virDomainObjPtr dom = NULL;
parallelsDriverLock(privconn);
if ((def = virDomainDefParseString(xml, privconn->caps, privconn->xmlopt,
......@@ -689,34 +688,28 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
_("Unsupported OS type: %s"), def->os.type);
goto cleanup;
}
dom = prlsdkAddDomain(privconn, def->uuid);
if (dom)
virObjectUnlock(dom);
else
olddom = prlsdkAddDomain(privconn, def->uuid);
if (!olddom)
goto cleanup;
olddom = virDomainObjListFindByName(privconn->domains, def->name);
if (!olddom) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Domain for '%s' is not defined after creation"),
def->name ? def->name : _("(unnamed)"));
} else {
if (prlsdkApplyConfig(conn, olddom, def))
goto cleanup;
}
}
if (prlsdkApplyConfig(conn, olddom, def) < 0) {
virObjectUnlock(olddom);
goto cleanup;
if (prlsdkUpdateDomain(privconn, olddom))
goto cleanup;
}
virObjectUnlock(olddom);
ret = virGetDomain(conn, def->name, def->uuid);
if (ret)
ret->id = def->id;
retdom = virGetDomain(conn, def->name, def->uuid);
if (retdom)
retdom->id = def->id;
cleanup:
if (olddom)
virObjectUnlock(olddom);
virDomainDefFree(def);
parallelsDriverUnlock(privconn);
return ret;
return retdom;
}
static int
......
......@@ -1258,7 +1258,7 @@ prlsdkAddDomain(parallelsConnPtr privconn, const unsigned char *uuid)
return dom;
}
static int
int
prlsdkUpdateDomain(parallelsConnPtr privconn, virDomainObjPtr dom)
{
PRL_HANDLE job;
......
......@@ -32,6 +32,7 @@ int
prlsdkLoadDomains(parallelsConnPtr privconn);
virDomainObjPtr
prlsdkAddDomain(parallelsConnPtr privconn, const unsigned char *uuid);
int prlsdkUpdateDomain(parallelsConnPtr privconn, virDomainObjPtr dom);
int prlsdkSubscribeToPCSEvents(parallelsConnPtr privconn);
void prlsdkUnsubscribeFromPCSEvents(parallelsConnPtr privconn);
int prlsdkStart(parallelsConnPtr privconn, PRL_HANDLE sdkdom);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册