From: Peter Krempa Date: Tue, 23 Jun 2020 04:22:54 +0000 (+0200) Subject: qemuBackupDiskDataCleanupOne: Don't exit early when the job has started X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=165b430eb9a1213ef32f14ace14d8377e9e71446;p=libvirt.git qemuBackupDiskDataCleanupOne: Don't exit early when the job has started 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 Reviewed-by: Ján Tomko --- 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);