[libvirt] [PATCH 3/4] vz: remove code duplication from LoadDomain()

Mikhail Feoktistov mfeoktistov at virtuozzo.com
Sat Jan 23 08:42:16 UTC 2016


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




More information about the libvir-list mailing list