]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virDomainObjListAdd: Transfer definition ownership
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 2 Nov 2021 11:19:50 +0000 (12:19 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 24 Nov 2021 12:12:20 +0000 (13:12 +0100)
Upon successful return from virDomainObjListAdd() the
virDomainObj is the owner of secret definition. To make this
ownership transfer even more visible, lets pass the definition as
a double pointer and use g_steal_pointer().

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
18 files changed:
src/bhyve/bhyve_driver.c
src/ch/ch_driver.c
src/conf/domain_conf.c
src/conf/domain_conf.h
src/conf/virdomainobjlist.c
src/conf/virdomainobjlist.h
src/libxl/libxl_domain.c
src/libxl/libxl_driver.c
src/libxl/libxl_migration.c
src/lxc/lxc_driver.c
src/openvz/openvz_conf.c
src/openvz/openvz_driver.c
src/qemu/qemu_driver.c
src/qemu/qemu_migration.c
src/qemu/qemu_snapshot.c
src/test/test_driver.c
src/vmware/vmware_conf.c
src/vmware/vmware_driver.c

index 516490f6cd53d489e710cd76e773f99ed335ec01..eccf9b44a8c1d75def1dff82841fc45a9a3a7721 100644 (file)
@@ -533,11 +533,10 @@ bhyveDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flag
     if (bhyveDomainAssignAddresses(def, NULL) < 0)
         goto cleanup;
 
-    if (!(vm = virDomainObjListAdd(privconn->domains, def,
+    if (!(vm = virDomainObjListAdd(privconn->domains, &def,
                                    privconn->xmlopt,
                                    0, &oldDef)))
         goto cleanup;
-    def = NULL;
     vm->persistent = 1;
 
     if (virDomainDefSave(vm->newDef ? vm->newDef : vm->def,
@@ -915,12 +914,11 @@ bhyveDomainCreateXML(virConnectPtr conn,
     if (bhyveDomainAssignAddresses(def, NULL) < 0)
         goto cleanup;
 
-    if (!(vm = virDomainObjListAdd(privconn->domains, def,
+    if (!(vm = virDomainObjListAdd(privconn->domains, &def,
                                    privconn->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE, NULL)))
         goto cleanup;
-    def = NULL;
 
     if (virBhyveProcessStart(conn, vm,
                              VIR_DOMAIN_RUNNING_BOOTED,
index 9eaf3ee4996693a04a678678dc3446467671cbe1..464bcef907a1a7ac5fa13ef1c312d2cf6eff3ba5 100644 (file)
@@ -237,15 +237,13 @@ chDomainCreateXML(virConnectPtr conn,
         goto cleanup;
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   vmdef,
+                                   &vmdef,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                        VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
         goto cleanup;
 
-    vmdef = NULL;
-
     if (virCHDomainObjBeginJob(vm, CH_JOB_MODIFY) < 0)
         goto cleanup;
 
@@ -323,12 +321,11 @@ chDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags)
     if (virDomainDefineXMLFlagsEnsureACL(conn, vmdef) < 0)
         goto cleanup;
 
-    if (!(vm = virDomainObjListAdd(driver->domains, vmdef,
+    if (!(vm = virDomainObjListAdd(driver->domains, &vmdef,
                                    driver->xmlopt,
                                    0, NULL)))
         goto cleanup;
 
-    vmdef = NULL;
     vm->persistent = 1;
 
     dom = virGetDomain(conn, vm->def->name, vm->def->uuid, vm->def->id);
index 5cfb2d91eb779d74e06f37bca34060ebf9b3e0d9..f88405ab02c2a62f7ef2d5f6ab6283af01c8e6a5 100644 (file)
@@ -3865,7 +3865,7 @@ virDomainDefNew(virDomainXMLOption *xmlopt)
 
 
 void virDomainObjAssignDef(virDomainObj *domain,
-                           virDomainDef *def,
+                           virDomainDef **def,
                            bool live,
                            virDomainDef **oldDef)
 {
@@ -3876,7 +3876,7 @@ void virDomainObjAssignDef(virDomainObj *domain,
             *oldDef = domain->newDef;
         else
             virDomainDefFree(domain->newDef);
-        domain->newDef = def;
+        domain->newDef = g_steal_pointer(def);
     } else {
         if (live) {
             /* save current configuration to be restored on domain shutdown */
@@ -3884,13 +3884,13 @@ void virDomainObjAssignDef(virDomainObj *domain,
                 domain->newDef = domain->def;
             else
                 virDomainDefFree(domain->def);
-            domain->def = def;
+            domain->def = g_steal_pointer(def);
         } else {
             if (oldDef)
                 *oldDef = domain->def;
             else
                 virDomainDefFree(domain->def);
-            domain->def = def;
+            domain->def = g_steal_pointer(def);
         }
     }
 }
index 86349603132f1f53fcc597db52ebcb793c2f15de..c4a8dcc2ea35beff828580b8b0cbfcdd8a95edbb 100644 (file)
@@ -3388,7 +3388,7 @@ virDomainNetDefNew(virDomainXMLOption *xmlopt);
 virDomainDef *virDomainDefNew(virDomainXMLOption *xmlopt);
 
 void virDomainObjAssignDef(virDomainObj *domain,
-                           virDomainDef *def,
+                           virDomainDef **def,
                            bool live,
                            virDomainDef **oldDef);
 int virDomainObjSetDefTransient(virDomainXMLOption *xmlopt,
index ff6c4c1b4f5c8770d768a3f7916f75bc569e401d..063c63cd3070e535c40ef846979ab0fe3826720e 100644 (file)
@@ -257,13 +257,17 @@ virDomainObjListAddObjLocked(virDomainObjList *doms,
  * the @def being added is assumed to represent a
  * live config, not a future inactive config
  *
+ * Upon successful return the virDomain object is the owner of
+ * @def and callers should use @vm->def if they need to access
+ * the definition as @def is set to NULL.
+ *
  * The returned @vm from this function will be locked and ref
  * counted. The caller is expected to use virDomainObjEndAPI
  * when it completes usage.
  */
 static virDomainObj *
 virDomainObjListAddLocked(virDomainObjList *doms,
-                          virDomainDef *def,
+                          virDomainDef **def,
                           virDomainXMLOption *xmlopt,
                           unsigned int flags,
                           virDomainDef **oldDef)
@@ -275,13 +279,13 @@ virDomainObjListAddLocked(virDomainObjList *doms,
         *oldDef = NULL;
 
     /* See if a VM with matching UUID already exists */
-    if ((vm = virDomainObjListFindByUUIDLocked(doms, def->uuid))) {
+    if ((vm = virDomainObjListFindByUUIDLocked(doms, (*def)->uuid))) {
         if (vm->removing) {
             virReportError(VIR_ERR_OPERATION_FAILED,
                            _("domain '%s' is already being removed"),
                            vm->def->name);
             goto error;
-        } else if (STRNEQ(vm->def->name, def->name)) {
+        } else if (STRNEQ(vm->def->name, (*def)->name)) {
             /* UUID matches, but if names don't match, refuse it */
             virUUIDFormat(vm->def->uuid, uuidstr);
             virReportError(VIR_ERR_OPERATION_FAILED,
@@ -312,20 +316,20 @@ virDomainObjListAddLocked(virDomainObjList *doms,
                               oldDef);
     } else {
         /* UUID does not match, but if a name matches, refuse it */
-        if ((vm = virDomainObjListFindByNameLocked(doms, def->name))) {
+        if ((vm = virDomainObjListFindByNameLocked(doms, (*def)->name))) {
             virUUIDFormat(vm->def->uuid, uuidstr);
             virReportError(VIR_ERR_OPERATION_FAILED,
                            _("domain '%s' already exists with uuid %s"),
-                           def->name, uuidstr);
+                           (*def)->name, uuidstr);
             goto error;
         }
 
         if (!(vm = virDomainObjNew(xmlopt)))
             goto error;
-        vm->def = def;
+        vm->def = g_steal_pointer(def);
 
         if (virDomainObjListAddObjLocked(doms, vm) < 0) {
-            vm->def = NULL;
+            *def = g_steal_pointer(&vm->def);
             goto error;
         }
     }
@@ -340,7 +344,7 @@ virDomainObjListAddLocked(virDomainObjList *doms,
 
 virDomainObj *
 virDomainObjListAdd(virDomainObjList *doms,
-                    virDomainDef *def,
+                    virDomainDef **def,
                     virDomainXMLOption *xmlopt,
                     unsigned int flags,
                     virDomainDef **oldDef)
@@ -498,7 +502,7 @@ virDomainObjListLoadConfig(virDomainObjList *doms,
     if ((autostart = virFileLinkPointsTo(autostartLink, configFile)) < 0)
         goto error;
 
-    if (!(dom = virDomainObjListAddLocked(doms, def, xmlopt, 0, &oldDef)))
+    if (!(dom = virDomainObjListAddLocked(doms, &def, xmlopt, 0, &oldDef)))
         goto error;
 
     dom->autostart = autostart;
index 7b4e34b951108ea0fd9e1777d2bcfaf3e98ffc4b..4169eb4f783b5b59daf83a9a1cef62023cf7c3cb 100644 (file)
@@ -40,7 +40,7 @@ enum {
     VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE = (1 << 1),
 };
 virDomainObj *virDomainObjListAdd(virDomainObjList *doms,
-                                  virDomainDef *def,
+                                  virDomainDef **def,
                                   virDomainXMLOption *xmlopt,
                                   unsigned int flags,
                                   virDomainDef **oldDef);
index 4f61584ceb56124402526208608d194c70e23585..d9dca370c6e6b06f8e2b8fd2c016bf98e8e5c688 100644 (file)
@@ -1482,8 +1482,7 @@ libxlDomainStartNew(libxlDriverPrivate *driver,
             goto cleanup;
         }
 
-        virDomainObjAssignDef(vm, def, true, NULL);
-        def = NULL;
+        virDomainObjAssignDef(vm, &def, true, NULL);
 
         if (unlink(managed_save_path) < 0)
             VIR_WARN("Failed to remove the managed state %s",
index 39da10983e2035b080cc5de26156746245ae05a7..23a28dc12418ab69dbbef6f2cb521c24371fd145 100644 (file)
@@ -595,13 +595,12 @@ libxlAddDom0(libxlDriverPrivate *driver)
         if (virUUIDParse("00000000-0000-0000-0000-000000000000", def->uuid) < 0)
             goto cleanup;
 
-        if (!(vm = virDomainObjListAdd(driver->domains, def,
+        if (!(vm = virDomainObjListAdd(driver->domains, &def,
                                        driver->xmlopt,
                                        0,
                                        NULL)))
             goto cleanup;
 
-        def = NULL;
         vm->persistent = 1;
         virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, VIR_DOMAIN_RUNNING_BOOTED);
     }
@@ -1028,13 +1027,12 @@ libxlDomainCreateXML(virConnectPtr conn, const char *xml,
     if (virDomainCreateXMLEnsureACL(conn, def) < 0)
         goto cleanup;
 
-    if (!(vm = virDomainObjListAdd(driver->domains, def,
+    if (!(vm = virDomainObjListAdd(driver->domains, &def,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
         goto cleanup;
-    def = NULL;
 
     if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) {
         if (!vm->persistent)
@@ -1948,13 +1946,12 @@ libxlDomainRestoreFlags(virConnectPtr conn, const char *from,
     if (virDomainRestoreFlagsEnsureACL(conn, def) < 0)
         goto cleanup;
 
-    if (!(vm = virDomainObjListAdd(driver->domains, def,
+    if (!(vm = virDomainObjListAdd(driver->domains, &def,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
         goto cleanup;
-    def = NULL;
 
     if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) {
         if (!vm->persistent)
@@ -2826,12 +2823,11 @@ libxlDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flag
     if (virDomainDefineXMLFlagsEnsureACL(conn, def) < 0)
         goto cleanup;
 
-    if (!(vm = virDomainObjListAdd(driver->domains, def,
+    if (!(vm = virDomainObjListAdd(driver->domains, &def,
                                    driver->xmlopt,
                                    0,
                                    &oldDef)))
         goto cleanup;
-    def = NULL;
 
     vm->persistent = 1;
 
@@ -4143,10 +4139,8 @@ libxlDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
     /* Finally, if no error until here, we can save config. */
     if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) {
         ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
-        if (!ret) {
-            virDomainObjAssignDef(vm, vmdef, false, NULL);
-            vmdef = NULL;
-        }
+        if (!ret)
+            virDomainObjAssignDef(vm, &vmdef, false, NULL);
     }
 
  endjob:
@@ -4234,10 +4228,8 @@ libxlDomainDetachDeviceFlags(virDomainPtr dom, const char *xml,
     /* Finally, if no error until here, we can save config. */
     if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) {
         ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
-        if (!ret) {
-            virDomainObjAssignDef(vm, vmdef, false, NULL);
-            vmdef = NULL;
-        }
+        if (!ret)
+            virDomainObjAssignDef(vm, &vmdef, false, NULL);
     }
 
  endjob:
@@ -4319,10 +4311,8 @@ libxlDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
     /* Finally, if no error until here, we can save config. */
     if (!ret && (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG)) {
         ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
-        if (!ret) {
-            virDomainObjAssignDef(vm, vmdef, false, NULL);
-            vmdef = NULL;
-        }
+        if (!ret)
+            virDomainObjAssignDef(vm, &vmdef, false, NULL);
     }
 
  cleanup:
index be5cc7e049606574508b82816db68a0d6daa5015..cdd714d6b875b203ea2d0c112633569b0ee0e083 100644 (file)
@@ -548,13 +548,12 @@ libxlDomainMigrationDstPrepareTunnel3(virConnectPtr dconn,
                                        &mig, &xmlout, &taint_hook) < 0)
         goto error;
 
-    if (!(vm = virDomainObjListAdd(driver->domains, *def,
+    if (!(vm = virDomainObjListAdd(driver->domains, def,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
         goto error;
-    *def = NULL;
 
     /*
      * Unless an error is encountered in this function, the job will
@@ -658,13 +657,12 @@ libxlDomainMigrationDstPrepare(virConnectPtr dconn,
                                        &mig, &xmlout, &taint_hook) < 0)
         goto error;
 
-    if (!(vm = virDomainObjListAdd(driver->domains, *def,
+    if (!(vm = virDomainObjListAdd(driver->domains, def,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
         goto error;
-    *def = NULL;
 
     /*
      * Unless an error is encountered in this function, the job will
index e2720a6f893ba3f7aee5fc689d91802159010927..3cdf73c69fa2c790bd3c4feff803a0bb37b4cc13 100644 (file)
@@ -435,12 +435,11 @@ lxcDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags)
         goto cleanup;
     }
 
-    if (!(vm = virDomainObjListAdd(driver->domains, def,
+    if (!(vm = virDomainObjListAdd(driver->domains, &def,
                                    driver->xmlopt,
                                    0, &oldDef)))
         goto cleanup;
 
-    def = NULL;
     vm->persistent = 1;
 
     if (virDomainDefSave(vm->newDef ? vm->newDef : vm->def,
@@ -1118,13 +1117,12 @@ lxcDomainCreateXMLWithFiles(virConnectPtr conn,
     }
 
 
-    if (!(vm = virDomainObjListAdd(driver->domains, def,
+    if (!(vm = virDomainObjListAdd(driver->domains, &def,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
         goto cleanup;
-    def = NULL;
 
     if (virLXCDomainObjBeginJob(driver, vm, LXC_JOB_MODIFY) < 0) {
         if (!vm->persistent)
@@ -1917,8 +1915,7 @@ lxcDomainSetSchedulerParametersFlags(virDomainPtr dom,
         if (rc < 0)
             goto endjob;
 
-        virDomainObjAssignDef(vm, persistentDefCopy, false, NULL);
-        persistentDefCopy = NULL;
+        virDomainObjAssignDef(vm, &persistentDefCopy, false, NULL);
     }
 
     ret = 0;
@@ -4368,10 +4365,8 @@ static int lxcDomainAttachDeviceFlags(virDomainPtr dom,
     /* Finally, if no error until here, we can save config. */
     if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
         ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
-        if (!ret) {
-            virDomainObjAssignDef(vm, vmdef, false, NULL);
-            vmdef = NULL;
-        }
+        if (!ret)
+            virDomainObjAssignDef(vm, &vmdef, false, NULL);
     }
 
  endjob:
@@ -4444,8 +4439,7 @@ static int lxcDomainUpdateDeviceFlags(virDomainPtr dom,
     if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0)
         goto endjob;
 
-    virDomainObjAssignDef(vm, vmdef, false, NULL);
-    vmdef = NULL;
+    virDomainObjAssignDef(vm, &vmdef, false, NULL);
     ret = 0;
 
  endjob:
@@ -4537,10 +4531,8 @@ static int lxcDomainDetachDeviceFlags(virDomainPtr dom,
     /* Finally, if no error until here, we can save config. */
     if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
         ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
-        if (!ret) {
-            virDomainObjAssignDef(vm, vmdef, false, NULL);
-            vmdef = NULL;
-        }
+        if (!ret)
+            virDomainObjAssignDef(vm, &vmdef, false, NULL);
     }
 
  endjob:
index 9f879e90eb4b8179d8950cc4fde58b3411f355ef..e2fbc28abc612925740c2e4ed8e71ac9f76765d2 100644 (file)
@@ -527,7 +527,7 @@ int openvzLoadDomains(struct openvz_driver *driver)
             flags |= VIR_DOMAIN_OBJ_LIST_ADD_LIVE;
 
         if (!(dom = virDomainObjListAdd(driver->domains,
-                                        def,
+                                        &def,
                                         driver->xmlopt,
                                         flags,
                                         NULL)))
@@ -547,7 +547,6 @@ int openvzLoadDomains(struct openvz_driver *driver)
 
         virDomainObjEndAPI(&dom);
         dom = NULL;
-        def = NULL;
     }
 
     virCommandFree(cmd);
index 681eb734ceeed7ec0d1d78f328712c8560347e5e..d9c71a5722066fcae5b29278fad98747d4392389 100644 (file)
@@ -842,11 +842,10 @@ openvzDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla
     if (virXMLCheckIllegalChars("name", vmdef->name, "\n") < 0)
         goto cleanup;
 
-    if (!(vm = virDomainObjListAdd(driver->domains, vmdef,
+    if (!(vm = virDomainObjListAdd(driver->domains, &vmdef,
                                    driver->xmlopt,
                                    0, NULL)))
         goto cleanup;
-    vmdef = NULL;
     vm->persistent = 1;
 
     if (openvzSetInitialConfig(vm->def) < 0) {
@@ -930,13 +929,13 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml,
         goto cleanup;
 
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   vmdef,
+                                   &vmdef,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
         goto cleanup;
-    vmdef = NULL;
+
     /* All OpenVZ domains seem to be persistent - this is a bit of a violation
      * of this libvirt API which is intended for transient domain creation */
     vm->persistent = 1;
@@ -2094,13 +2093,12 @@ openvzDomainMigratePrepare3Params(virConnectPtr dconn,
                                         VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)))
         goto error;
 
-    if (!(vm = virDomainObjListAdd(driver->domains, def,
+    if (!(vm = virDomainObjListAdd(driver->domains, &def,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
         goto error;
-    def = NULL;
 
     if (!uri_in) {
         if ((my_hostname = virGetHostname()) == NULL)
index 1959b639da4bd24c1ba2e34639338a152c6e3136..aa48480043d96d304b45ae09b93a84c6700bea57 100644 (file)
@@ -1726,13 +1726,12 @@ static virDomainPtr qemuDomainCreateXML(virConnectPtr conn,
     if (virDomainCreateXMLEnsureACL(conn, def) < 0)
         goto cleanup;
 
-    if (!(vm = virDomainObjListAdd(driver->domains, def,
+    if (!(vm = virDomainObjListAdd(driver->domains, &def,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
         goto cleanup;
-    def = NULL;
 
     if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START,
                             flags) < 0) {
@@ -5944,13 +5943,12 @@ qemuDomainRestoreFlags(virConnectPtr conn,
         def = tmp;
     }
 
-    if (!(vm = virDomainObjListAdd(driver->domains, def,
+    if (!(vm = virDomainObjListAdd(driver->domains, &def,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
         goto cleanup;
-    def = NULL;
 
     if (flags & VIR_DOMAIN_SAVE_RUNNING)
         data->header.was_running = 1;
@@ -6231,8 +6229,7 @@ qemuDomainObjRestore(virConnectPtr conn,
         goto cleanup;
     }
 
-    virDomainObjAssignDef(vm, def, true, NULL);
-    def = NULL;
+    virDomainObjAssignDef(vm, &def, true, NULL);
 
     ret = qemuSaveImageStartVM(conn, driver, vm, &fd, data, path,
                                start_paused, asyncJob);
@@ -6601,11 +6598,10 @@ qemuDomainDefineXMLFlags(virConnectPtr conn,
     if (virDomainDefineXMLFlagsEnsureACL(conn, def) < 0)
         goto cleanup;
 
-    if (!(vm = virDomainObjListAdd(driver->domains, def,
+    if (!(vm = virDomainObjListAdd(driver->domains, &def,
                                    driver->xmlopt,
                                    0, &oldDef)))
         goto cleanup;
-    def = NULL;
 
     if (!oldDef && qemuDomainNamePathsCleanup(cfg, vm->def->name, false) < 0)
         goto cleanup;
@@ -7925,8 +7921,7 @@ qemuDomainAttachDeviceLiveAndConfig(virDomainObj *vm,
         if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0)
             return -1;
 
-        virDomainObjAssignDef(vm, vmdef, false, NULL);
-        vmdef = NULL;
+        virDomainObjAssignDef(vm, &vmdef, false, NULL);
     }
 
     return 0;
@@ -8062,10 +8057,8 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
     /* Finally, if no error until here, we can save config. */
     if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
         ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
-        if (!ret) {
-            virDomainObjAssignDef(vm, vmdef, false, NULL);
-            vmdef = NULL;
-        }
+        if (!ret)
+            virDomainObjAssignDef(vm, &vmdef, false, NULL);
     }
 
  endjob:
@@ -8149,8 +8142,7 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriver *driver,
         if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0)
             goto cleanup;
 
-        virDomainObjAssignDef(vm, vmdef, false, NULL);
-        vmdef = NULL;
+        virDomainObjAssignDef(vm, &vmdef, false, NULL);
     }
 
     ret = 0;
@@ -8219,8 +8211,7 @@ qemuDomainDetachDeviceAliasLiveAndConfig(virQEMUDriver *driver,
     if (vmdef) {
         if (virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir) < 0)
             return -1;
-        virDomainObjAssignDef(vm, vmdef, false, NULL);
-        vmdef = NULL;
+        virDomainObjAssignDef(vm, &vmdef, false, NULL);
     }
 
     return 0;
@@ -9607,8 +9598,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
         if (rc < 0)
             goto endjob;
 
-        virDomainObjAssignDef(vm, persistentDefCopy, false, NULL);
-        persistentDefCopy = NULL;
+        virDomainObjAssignDef(vm, &persistentDefCopy, false, NULL);
     }
 
     ret = 0;
index 972904184639ef7bc0fbdeb9b8c7971fba7b578b..8001792f5a83d0a98728451cc78123bc0255868d 100644 (file)
@@ -2878,13 +2878,12 @@ qemuMigrationDstPrepareAny(virQEMUDriver *driver,
                                          QEMU_MIGRATION_COOKIE_BLOCK_DIRTY_BITMAPS)))
         goto cleanup;
 
-    if (!(vm = virDomainObjListAdd(driver->domains, *def,
+    if (!(vm = virDomainObjListAdd(driver->domains, def,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
         goto cleanup;
-    *def = NULL;
 
     priv = vm->privateData;
     jobPriv = priv->job.privateData;
index 7a1c2097cb5dbcd430fc17061ff134cc03fb721e..661aeeb8aa29b4d5397afc3040818774ce64ea30 100644 (file)
@@ -1984,13 +1984,11 @@ qemuSnapshotRevert(virDomainObj *vm,
         }
 
         if (inactiveConfig) {
-            virDomainObjAssignDef(vm, inactiveConfig, false, NULL);
-            inactiveConfig = NULL;
+            virDomainObjAssignDef(vm, &inactiveConfig, false, NULL);
             defined = true;
         }
 
-        virDomainObjAssignDef(vm, config, true, NULL);
-        config = NULL;
+        virDomainObjAssignDef(vm, &config, true, NULL);
 
         /* No cookie means libvirt which saved the domain was too old to
          * mess up the CPU definitions.
@@ -2065,8 +2063,7 @@ qemuSnapshotRevert(virDomainObj *vm,
         }
 
         if (inactiveConfig) {
-            virDomainObjAssignDef(vm, inactiveConfig, false, NULL);
-            inactiveConfig = NULL;
+            virDomainObjAssignDef(vm, &inactiveConfig, false, NULL);
             defined = true;
         }
 
index 369edacf29a83f03185d4abdaccb6a3258490c56..b6bca884f046682dfe3fce4301e257749f325c3d 100644 (file)
@@ -1043,7 +1043,7 @@ testParseDomains(testDriver *privconn,
 
         if (testDomainGenerateIfnames(def) < 0 ||
             !(obj = virDomainObjListAdd(privconn->domains,
-                                        def,
+                                        &def,
                                         privconn->xmlopt,
                                         0, NULL))) {
             virDomainDefFree(def);
@@ -1053,7 +1053,7 @@ testParseDomains(testDriver *privconn,
         if (testParseDomainSnapshots(privconn, obj, file, ctxt) < 0)
             goto error;
 
-        nsdata = def->namespaceData;
+        nsdata = obj->def->namespaceData;
         obj->persistent = !nsdata->transient;
         obj->hasManagedSave = nsdata->hasManagedSave;
 
@@ -1768,13 +1768,12 @@ testDomainCreateXML(virConnectPtr conn, const char *xml,
     if (testDomainGenerateIfnames(def) < 0)
         goto cleanup;
     if (!(dom = virDomainObjListAdd(privconn->domains,
-                                    def,
+                                    &def,
                                     privconn->xmlopt,
                                     VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                     VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                     NULL)))
         goto cleanup;
-    def = NULL;
 
     if (testDomainStartState(privconn, dom, VIR_DOMAIN_RUNNING_BOOTED) < 0) {
         if (!dom->persistent)
@@ -2517,13 +2516,12 @@ testDomainRestoreFlags(virConnectPtr conn,
     if (testDomainGenerateIfnames(def) < 0)
         goto cleanup;
     if (!(dom = virDomainObjListAdd(privconn->domains,
-                                    def,
+                                    &def,
                                     privconn->xmlopt,
                                     VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                     VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                     NULL)))
         goto cleanup;
-    def = NULL;
 
     if (testDomainStartState(privconn, dom, VIR_DOMAIN_RUNNING_RESTORED) < 0) {
         if (!dom->persistent)
@@ -4208,12 +4206,11 @@ static virDomainPtr testDomainDefineXMLFlags(virConnectPtr conn,
     if (testDomainGenerateIfnames(def) < 0)
         goto cleanup;
     if (!(dom = virDomainObjListAdd(privconn->domains,
-                                    def,
+                                    &def,
                                     privconn->xmlopt,
                                     0,
                                     &oldDef)))
         goto cleanup;
-    def = NULL;
     dom->persistent = 1;
 
     event = virDomainEventLifecycleNewFromObj(dom,
@@ -9065,7 +9062,7 @@ testDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
             virObjectEventStateQueue(privconn->eventState, event);
         }
 
-        virDomainObjAssignDef(vm, config, false, NULL);
+        virDomainObjAssignDef(vm, &config, false, NULL);
         if (testDomainStartState(privconn, vm,
                             VIR_DOMAIN_RUNNING_FROM_SNAPSHOT) < 0)
             goto cleanup;
@@ -9086,7 +9083,7 @@ testDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
         }
     } else {
         /* Transitions 1, 4, 7 */
-        virDomainObjAssignDef(vm, config, false, NULL);
+        virDomainObjAssignDef(vm, &config, false, NULL);
 
         if (virDomainObjIsActive(vm)) {
             /* Transitions 4, 7 */
index 811507cd555f50ce7c4cb45f450279ce9beae23f..ab03617d9581a158d18b4d680dc3a40c8bc61c0b 100644 (file)
@@ -156,7 +156,7 @@ vmwareLoadDomains(struct vmware_driver *driver)
             goto cleanup;
         }
 
-        if (!(vm = virDomainObjListAdd(driver->domains, vmdef,
+        if (!(vm = virDomainObjListAdd(driver->domains, &vmdef,
                                        driver->xmlopt,
                                        0, NULL)))
             goto cleanup;
@@ -165,7 +165,7 @@ vmwareLoadDomains(struct vmware_driver *driver)
 
         pDomain->vmxPath = g_strdup(vmxPath);
 
-        vmwareDomainConfigDisplay(pDomain, vmdef);
+        vmwareDomainConfigDisplay(pDomain, vm->def);
 
         if ((vm->def->id = vmwareExtractPid(vmxPath)) < 0)
             goto cleanup;
@@ -175,8 +175,6 @@ vmwareLoadDomains(struct vmware_driver *driver)
         vm->persistent = 1;
 
         virDomainObjEndAPI(&vm);
-
-        vmdef = NULL;
     }
 
     ret = 0;
index 3bd6d4d4404f08586aca5dbc02e06727a54d12fa..e6843ee74552960c5d25b19c7cd121da073fc9dc 100644 (file)
@@ -438,7 +438,7 @@ vmwareDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla
 
     /* assign def */
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   vmdef,
+                                   &vmdef,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
@@ -447,9 +447,8 @@ vmwareDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int fla
     pDomain = vm->privateData;
     pDomain->vmxPath = g_strdup(vmxPath);
 
-    vmwareDomainConfigDisplay(pDomain, vmdef);
+    vmwareDomainConfigDisplay(pDomain, vm->def);
 
-    vmdef = NULL;
     vm->persistent = 1;
 
     dom = virGetDomain(conn, vm->def->name, vm->def->uuid, -1);
@@ -689,7 +688,7 @@ vmwareDomainCreateXML(virConnectPtr conn, const char *xml,
 
     /* assign def */
     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   vmdef,
+                                   &vmdef,
                                    driver->xmlopt,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
@@ -699,8 +698,7 @@ vmwareDomainCreateXML(virConnectPtr conn, const char *xml,
     pDomain = vm->privateData;
     pDomain->vmxPath = g_strdup(vmxPath);
 
-    vmwareDomainConfigDisplay(pDomain, vmdef);
-    vmdef = NULL;
+    vmwareDomainConfigDisplay(pDomain, vm->def);
 
     if (vmwareStartVM(driver, vm) < 0) {
         if (!vm->persistent)