From: Peter Krempa Date: Tue, 11 Dec 2012 11:02:16 +0000 (+0100) Subject: qemu: snapshot: Remove memory image if external checkpoint fails X-Git-Tag: v1.0.1-rc1~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a912977a657ae92724c04e8c4e6f70c6e8231849;p=thirdparty%2Flibvirt.git qemu: snapshot: Remove memory image if external checkpoint fails 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. --- diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 59b0df9502..d035bc3171 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -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; }