prlsdkLoadDomain works in 2 different cases:
1. Called first time for a domain. Then it creates and
initializes it. Then updates it from sdk handle.
2. Called when domain is already in list. In this case it updates domain from
sdk handle.
I think we could end up in a better series if we split
this function into 2: first is to create and initialize,
second update domain from sdk handle (load).
On 23.01.2016 11:42, Mikhail Feoktistov wrote:
> Now we create new domain by calling prlsdkNewDomain().
> In LoadDomain() we just load info from vm instance to domain object.
> So remove code to create domain from LoadDomain().
>
> ---
> src/vz/vz_sdk.c | 55 +--
> 1 file changed, 17 insertions(+), 38 deletions(-)
>
> diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
> index 765f5f1..d9f2127 100644
> --- a/src/vz/vz_sdk.c
> +++ b/src/vz/vz_sdk.c
> @@ -1260,26 +1260,29 @@ prlsdkLoadDomain(vzConnPtr privconn,
> PRL_UINT32 ram;
> PRL_UINT32 envId;
> PRL_VM_AUTOSTART_OPTION autostart;
> +unsigned char uuid[VIR_UUID_BUFLEN];
> +char *name;
>
> virCheckNonNullArgGoto(privconn, error);
> virCheckNonNullArgGoto(sdkdom, error);
>
> -if (!(def = virDomainDefNew()))
> +if (prlsdkGetDomainIds(sdkdom, , uuid) < 0)
> goto error;
>
> if (!olddom) {
> -if (VIR_ALLOC(pdom) < 0)
> -goto error;
> +dom = prlsdkNewDomain(privconn, name, uuid);
> +def = dom->def;
> +pdom = dom->privateData;
> } else {
> +if (!(def = virDomainDefNewFull(name, uuid, -1)))
> +goto error;
> pdom = olddom->privateData;
> +if (STREQ(privconn->drivername, "vz"))
> +def->virtType = VIR_DOMAIN_VIRT_VZ;
> +else
> +def->virtType = VIR_DOMAIN_VIRT_PARALLELS;
> }
> -
> -if (STREQ(privconn->drivername, "vz"))
> -def->virtType = VIR_DOMAIN_VIRT_VZ;
> -else
> -def->virtType = VIR_DOMAIN_VIRT_PARALLELS;
> -
> -def->id = -1;
> +VIR_FREE(name);
>
> /* we will remove this field in the near future, so let's set it
> * to NULL temporarily */
> @@ -1292,9 +1295,6 @@ prlsdkLoadDomain(vzConnPtr privconn,
> goto error;
> }
>
> -if (prlsdkGetDomainIds(sdkdom, >name, def->uuid) < 0)
> -goto error;
> -
> def->onReboot = VIR_DOMAIN_LIFECYCLE_RESTART;
> def->onPoweroff = VIR_DOMAIN_LIFECYCLE_DESTROY;
> def->onCrash = VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY;
> @@ -1369,23 +1369,10 @@ prlsdkLoadDomain(vzConnPtr privconn,
> }
>
> if (olddom) {
> -/* assign new virDomainDef without any checks */
> -/* we can't use virDomainObjAssignDef, because it checks
> - * for state and domain name */
> dom = olddom;
> virDomainDefFree(dom->def);
> dom->def = def;
> -} else {
> -if (!(dom = virDomainObjListAdd(privconn->domains, def,
> -privconn->xmlopt,
> -0, NULL)))
> -goto error;
> }
> -/* dom is locked here */
> -
> -dom->privateData = pdom;
> -dom->privateDataFreeFunc = prlsdkDomObjFreePrivate;
> -dom->persistent = 1;
>
> switch (autostart) {
> case PAO_VM_START_ON_LOAD:
> @@ -1411,19 +1398,11 @@ prlsdkLoadDomain(vzConnPtr privconn,
>
> return dom;
> error:
> -if (dom && !olddom) {
> -/* Domain isn't persistent means that we haven't yet set
> - * prlsdkDomObjFreePrivate and should call it manually
> - */
> -if (!dom->persistent)
> -prlsdkDomObjFreePrivate(pdom);
> -
> +VIR_FREE(name);
> +if (!olddom && dom)
> virDomainObjListRemove(privconn->domains, dom);
> -}
> -/* Delete newly allocated def only if we haven't assigned it to domain
> - * Otherwise we will end up with domain having invalid def within it
> - */
> -if (!dom)
> +
> +if (olddom && !dom)
> virDomainDefFree(def);
>
> return NULL;
>
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list