1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

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 <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2020-06-23 06:22:54 +02:00
parent 214faa0b04
commit 165b430eb9

View File

@ -124,26 +124,25 @@ qemuBackupDiskDataCleanupOne(virDomainObjPtr vm,
{ {
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
if (dd->started) if (!dd->started) {
return; if (dd->added) {
qemuDomainObjEnterMonitor(priv->driver, vm);
qemuBlockStorageSourceAttachRollback(priv->mon, dd->crdata->srcdata[0]);
ignore_value(qemuDomainObjExitMonitor(priv->driver, vm));
}
if (dd->added) { if (dd->created) {
qemuDomainObjEnterMonitor(priv->driver, vm); if (virStorageFileUnlink(dd->store) < 0)
qemuBlockStorageSourceAttachRollback(priv->mon, dd->crdata->srcdata[0]); VIR_WARN("Unable to remove just-created %s", NULLSTR(dd->store->path));
ignore_value(qemuDomainObjExitMonitor(priv->driver, vm)); }
}
if (dd->created) { if (dd->labelled)
if (virStorageFileUnlink(dd->store) < 0) qemuDomainStorageSourceAccessRevoke(priv->driver, vm, dd->store);
VIR_WARN("Unable to remove just-created %s", NULLSTR(dd->store->path));
} }
if (dd->initialized) if (dd->initialized)
virStorageFileDeinit(dd->store); virStorageFileDeinit(dd->store);
if (dd->labelled)
qemuDomainStorageSourceAccessRevoke(priv->driver, vm, dd->store);
if (dd->blockjob) if (dd->blockjob)
qemuBlockJobStartupFinalize(vm, dd->blockjob); qemuBlockJobStartupFinalize(vm, dd->blockjob);