]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuDomainSnapshotLoad: Refactor handling of snapshot definition object
authorPeter Krempa <pkrempa@redhat.com>
Wed, 12 Jan 2022 15:40:03 +0000 (16:40 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 14 Jan 2022 17:11:58 +0000 (18:11 +0100)
Move the variable holding the snapshot definition into the loop and use
automatic clearing for it. Adjust the code for parity.

Note that the clearing of 'snapdef' on success of
'virDomainSnapshotAssignDef' will be refactored in upcoming patches.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_driver.c

index 65ac5ef367fc3a0a5f6cfbdfee685f2de43ea936..b3588f947803c17ae1532eee0259e8b713acf7c6 100644 (file)
@@ -343,7 +343,6 @@ qemuDomainSnapshotLoad(virDomainObj *vm,
     g_autofree char *snapDir = NULL;
     g_autoptr(DIR) dir = NULL;
     struct dirent *entry;
-    virDomainSnapshotDef *def = NULL;
     virDomainMomentObj *snap = NULL;
     virDomainMomentObj *current = NULL;
     bool cur;
@@ -367,6 +366,7 @@ qemuDomainSnapshotLoad(virDomainObj *vm,
         goto cleanup;
 
     while ((direrr = virDirRead(dir, &entry, NULL)) > 0) {
+        g_autoptr(virDomainSnapshotDef) snapdef = NULL;
         g_autofree char *xmlStr = NULL;
         g_autofree char *fullpath = NULL;
 
@@ -384,11 +384,11 @@ qemuDomainSnapshotLoad(virDomainObj *vm,
             continue;
         }
 
-        def = virDomainSnapshotDefParseString(xmlStr,
-                                              qemu_driver->xmlopt,
-                                              priv->qemuCaps, &cur,
-                                              flags);
-        if (def == NULL) {
+        snapdef = virDomainSnapshotDefParseString(xmlStr,
+                                                  qemu_driver->xmlopt,
+                                                  priv->qemuCaps, &cur,
+                                                  flags);
+        if (snapdef == NULL) {
             /* Nothing we can do here, skip this one */
             virReportError(VIR_ERR_INTERNAL_ERROR,
                            _("Failed to parse snapshot XML from file '%s'"),
@@ -396,10 +396,10 @@ qemuDomainSnapshotLoad(virDomainObj *vm,
             continue;
         }
 
-        snap = virDomainSnapshotAssignDef(vm->snapshots, def);
-        if (snap == NULL) {
-            virObjectUnref(def);
-        } else if (cur) {
+        snap = virDomainSnapshotAssignDef(vm->snapshots, snapdef);
+        if (snap)
+            snapdef = NULL;
+        if (cur && snap) {
             if (current)
                 virReportError(VIR_ERR_INTERNAL_ERROR,
                                _("Too many snapshots claiming to be current for domain %s"),