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 0a801f3..acbb556 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -11368,6 +11368,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 */
@@ -11439,6 +11440,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);
}
@@ -11509,6 +11513,8 @@ endjob:
cleanup:
VIR_FREE(xml);
+ if (memory_unlink && ret < 0)
+ unlink(snap->def->file);
return ret;
}
--
1.8.0