diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index b421340dde60f9cb7c2419fc3923d6bbb623c8b3..c33c6b9f2ede19e68ecc2e9a7af4391b10ef9b4b 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -5355,6 +5355,7 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, int oldvcpus = virDomainDefGetVcpus(vm->def); unsigned int nvcpus = vcpupriv->vcpus; int rc; + int ret = -1; if (!vcpupriv->alias) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, @@ -5369,11 +5370,11 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, rc = qemuMonitorDelDevice(qemuDomainGetMonitor(vm), vcpupriv->alias); if (qemuDomainObjExitMonitor(driver, vm) < 0) - return -1; + goto cleanup; if (rc < 0) { virDomainAuditVcpu(vm, oldvcpus, oldvcpus - nvcpus, "update", false); - return -1; + goto cleanup; } if ((rc = qemuDomainWaitForDeviceRemoval(vm)) <= 0) { @@ -5381,10 +5382,17 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver, virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("vcpu unplug request timed out")); - return -1; + goto cleanup; } - return qemuDomainRemoveVcpu(driver, vm, vcpu); + if (qemuDomainRemoveVcpu(driver, vm, vcpu) < 0) + goto cleanup; + + ret = 0; + + cleanup: + qemuDomainResetDeviceRemoval(vm); + return ret; }