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, &name, 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, &def->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; -- 1.8.3.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list