Originally the function was cleaning up a failed job only but now
there's other stuff that needs to be cleared too.
Make only steps which clean up after a failed job depend on the
'started' field and execute the rest of the code always.
This fixes a leak of the backup job tracking object and the blockdev-add
helper data.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_backup.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
index ab9cd2689f..3bd59402dc 100644
--- a/src/qemu/qemu_backup.c
+++ b/src/qemu/qemu_backup.c
@@ -124,26 +124,25 @@ qemuBackupDiskDataCleanupOne(virDomainObjPtr vm,
{
qemuDomainObjPrivatePtr priv = vm->privateData;
- if (dd->started)
- return;
+ if (!dd->started) {
+ if (dd->added) {
+ qemuDomainObjEnterMonitor(priv->driver, vm);
+ qemuBlockStorageSourceAttachRollback(priv->mon,
dd->crdata->srcdata[0]);
+ ignore_value(qemuDomainObjExitMonitor(priv->driver, vm));
+ }
- if (dd->added) {
- qemuDomainObjEnterMonitor(priv->driver, vm);
- qemuBlockStorageSourceAttachRollback(priv->mon,
dd->crdata->srcdata[0]);
- ignore_value(qemuDomainObjExitMonitor(priv->driver, vm));
- }
+ if (dd->created) {
+ if (virStorageFileUnlink(dd->store) < 0)
+ VIR_WARN("Unable to remove just-created %s",
NULLSTR(dd->store->path));
+ }
- if (dd->created) {
- if (virStorageFileUnlink(dd->store) < 0)
- VIR_WARN("Unable to remove just-created %s",
NULLSTR(dd->store->path));
+ if (dd->labelled)
+ qemuDomainStorageSourceAccessRevoke(priv->driver, vm, dd->store);
}
if (dd->initialized)
virStorageFileDeinit(dd->store);
- if (dd->labelled)
- qemuDomainStorageSourceAccessRevoke(priv->driver, vm, dd->store);
-
if (dd->blockjob)
qemuBlockJobStartupFinalize(vm, dd->blockjob);
--
2.26.2