virDomainAsyncJob asyncJob)
{
qemuDomainObjPrivate *priv = vm->privateData;
+ g_autoptr(virStorageSource) src = NULL;
+
VIR_DEBUG("copy job '%s' on VM '%s' pivoted", job->name, vm->def->name);
/* mirror may be NULL for copy job corresponding to migration */
qemuBlockJobRewriteConfigDiskSource(vm, job->disk, job->disk->mirror);
- qemuBlockJobEventProcessConcludedRemoveChain(driver, vm, asyncJob, job->disk->src);
- virObjectUnref(job->disk->src);
+ src = g_steal_pointer(&job->disk->src);
+
job->disk->src = g_steal_pointer(&job->disk->mirror);
+
+ qemuBlockJobEventProcessConcludedRemoveChain(driver, vm, asyncJob, src);
}
virDomainAsyncJob asyncJob)
{
qemuDomainObjPrivate *priv = vm->privateData;
+ g_autoptr(virStorageSource) mirror = NULL;
VIR_DEBUG("copy job '%s' on VM '%s' aborted", job->name, vm->def->name);
g_clear_pointer(&job->disk->mirror->backingStore, virObjectUnref);
}
+ mirror = g_steal_pointer(&job->disk->mirror);
+
/* activeWrite bitmap is removed automatically here */
- qemuBlockJobEventProcessConcludedRemoveChain(driver, vm, asyncJob, job->disk->mirror);
- g_clear_pointer(&job->disk->mirror, virObjectUnref);
+ qemuBlockJobEventProcessConcludedRemoveChain(driver, vm, asyncJob, mirror);
}