diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index ba9e44945b..2e3c99760d 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -5391,21 +5391,27 @@ qemuDomainWaitForDeviceRemoval(virDomainObj *vm) { qemuDomainObjPrivate *priv = vm->privateData; unsigned long long until; - int rc; if (virTimeMillisNow(&until) < 0) return 1; until += qemuDomainGetUnplugTimeout(vm); - while (priv->unplug.alias) { - if ((rc = virDomainObjWaitUntil(vm, until)) == 1) - return 0; + while (true) { + int rc; - if (rc < 0) { - VIR_WARN("Failed to wait on unplug condition for domain '%s' " - "device '%s'", vm->def->name, priv->unplug.alias); + if ((rc = virDomainObjWaitUntil(vm, until)) < 0) { + VIR_WARN("Failed to wait on unplug condition for domain '%s' device '%s'", + vm->def->name, priv->unplug.alias); return 1; } + + /* unplug event for this device was received, check the status */ + if (!priv->unplug.alias) + break; + + /* timeout */ + if (rc == 1) + return 0; } if (priv->unplug.status == QEMU_DOMAIN_UNPLUGGING_DEVICE_STATUS_GUEST_REJECTED) {