[libvirt] [PATCH v3 08/12] parallels: refactor parallelsDomainDefineXML
Maxim Nestratov
mnestratov at parallels.com
Tue Nov 25 12:53:43 UTC 2014
18.11.2014 16:17, Dmitry Guryanov пишет:
> 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 <dguryanov at parallels.com>
> ---
> 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 582ffdb..955516a 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 a943f4b..d1a8ebf 100644
> --- a/src/parallels/parallels_sdk.c
> +++ b/src/parallels/parallels_sdk.c
> @@ -1248,7 +1248,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 b654c2a..1fdef1a 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);
ack
More information about the libvir-list
mailing list