]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: snapshot: Remove memory image if external checkpoint fails
authorPeter Krempa <pkrempa@redhat.com>
Tue, 11 Dec 2012 11:02:16 +0000 (12:02 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 11 Dec 2012 12:59:14 +0000 (13:59 +0100)
When the disk snapshot part of an external system checkpoint fails the
memory image is retained. This patch adds code to remove the image in
such case.

src/qemu/qemu_driver.c

index 59b0df95021124878666b288d628a190a2a391a4..d035bc317178123c61d7492e59d0095f75af51ba 100644 (file)
@@ -11376,6 +11376,7 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn,
     qemuDomainObjPrivatePtr priv = vm->privateData;
     char *xml = NULL;
     bool memory = snap->def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
+    bool memory_unlink = false;
     bool atomic = !!(flags & VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC);
     bool transaction = qemuCapsGet(priv->caps, QEMU_CAPS_TRANSACTION);
     int thaw = 0; /* 1 if freeze succeeded, -1 if freeze failed */
@@ -11443,6 +11444,9 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn,
                                         QEMU_ASYNC_JOB_SNAPSHOT)) < 0)
             goto endjob;
 
+        /* the memory image was created, remove it on errors */
+        memory_unlink = true;
+
         /* forbid any further manipulation */
         qemuDomainObjSetAsyncJobMask(vm, DEFAULT_JOB_MASK);
     }
@@ -11513,6 +11517,8 @@ endjob:
 
 cleanup:
     VIR_FREE(xml);
+    if (memory_unlink && ret < 0)
+        unlink(snap->def->file);
 
     return ret;
 }