From 54a60fd70e8269d8a8211044e3d44644a861a78c Mon Sep 17 00:00:00 2001 From: Dmitry Guryanov Date: Mon, 1 Dec 2014 18:38:54 +0300 Subject: [PATCH] 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: Dmitry Guryanov --- src/parallels/parallels_driver.c | 35 +++++++++++++------------------- src/parallels/parallels_sdk.c | 2 +- src/parallels/parallels_sdk.h | 1 + 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c index 582ffdbe57..955516ac7f 100644 --- a/src/parallels/parallels_driver.c +++ b/src/parallels/parallels_driver.c @@ -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 diff --git a/src/parallels/parallels_sdk.c b/src/parallels/parallels_sdk.c index dc79fcab6d..fbecd63fc7 100644 --- a/src/parallels/parallels_sdk.c +++ b/src/parallels/parallels_sdk.c @@ -1258,7 +1258,7 @@ prlsdkAddDomain(parallelsConnPtr privconn, const unsigned char *uuid) return dom; } -static int +int prlsdkUpdateDomain(parallelsConnPtr privconn, virDomainObjPtr dom) { PRL_HANDLE job; diff --git a/src/parallels/parallels_sdk.h b/src/parallels/parallels_sdk.h index b654c2a57e..1fdef1ad05 100644 --- a/src/parallels/parallels_sdk.h +++ b/src/parallels/parallels_sdk.h @@ -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); -- GitLab