From a912977a657ae92724c04e8c4e6f70c6e8231849 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 11 Dec 2012 12:02:16 +0100 Subject: [PATCH] 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. --- src/qemu/qemu_driver.c | 6 ++++++ 1 file changed, 6 insertions(+) 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; } -- GitLab