提交 0f621198 编写于 作者: P Peter Krempa

qemu: Use domain condition for device removal signaling

No need to keep two separate conditions. A slight juggling of return
values is needed to accomodate virDomainObjWaitUntil.
上级 986a016c
...@@ -839,9 +839,6 @@ qemuDomainObjPrivateAlloc(void) ...@@ -839,9 +839,6 @@ qemuDomainObjPrivateAlloc(void)
goto error; goto error;
} }
if (virCondInit(&priv->unplugFinished) < 0)
goto error;
if (!(priv->devs = virChrdevAlloc())) if (!(priv->devs = virChrdevAlloc()))
goto error; goto error;
...@@ -871,7 +868,6 @@ qemuDomainObjPrivateFree(void *data) ...@@ -871,7 +868,6 @@ qemuDomainObjPrivateFree(void *data)
VIR_FREE(priv->lockState); VIR_FREE(priv->lockState);
VIR_FREE(priv->origname); VIR_FREE(priv->origname);
virCondDestroy(&priv->unplugFinished);
virStringFreeList(priv->qemuDevices); virStringFreeList(priv->qemuDevices);
virChrdevFree(priv->devs); virChrdevFree(priv->devs);
......
...@@ -199,7 +199,6 @@ struct _qemuDomainObjPrivate { ...@@ -199,7 +199,6 @@ struct _qemuDomainObjPrivate {
virPerfPtr perf; virPerfPtr perf;
virCond unplugFinished; /* signals that unpluggingDevice was unplugged */
const char *unpluggingDevice; /* alias of the device that is being unplugged */ const char *unpluggingDevice; /* alias of the device that is being unplugged */
char **qemuDevices; /* NULL-terminated list of devices aliases known to QEMU */ char **qemuDevices; /* NULL-terminated list of devices aliases known to QEMU */
......
...@@ -3361,6 +3361,7 @@ qemuDomainWaitForDeviceRemoval(virDomainObjPtr vm) ...@@ -3361,6 +3361,7 @@ qemuDomainWaitForDeviceRemoval(virDomainObjPtr vm)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
unsigned long long until; unsigned long long until;
int rc;
if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE_DEL_EVENT)) if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE_DEL_EVENT))
return 1; return 1;
...@@ -3370,15 +3371,13 @@ qemuDomainWaitForDeviceRemoval(virDomainObjPtr vm) ...@@ -3370,15 +3371,13 @@ qemuDomainWaitForDeviceRemoval(virDomainObjPtr vm)
until += qemuDomainRemoveDeviceWaitTime; until += qemuDomainRemoveDeviceWaitTime;
while (priv->unpluggingDevice) { while (priv->unpluggingDevice) {
if (virCondWaitUntil(&priv->unplugFinished, if ((rc = virDomainObjWaitUntil(vm, until)) == 1)
&vm->parent.lock, until) < 0) { return 0;
if (errno == ETIMEDOUT) {
return 0; if (rc < 0) {
} else { VIR_WARN("Failed to wait on unplug condition for domain '%s' "
VIR_WARN("Failed to wait on unplug condition for domain '%s' " "device '%s'", vm->def->name, priv->unpluggingDevice);
"device '%s'", vm->def->name, priv->unpluggingDevice); return 1;
return 1;
}
} }
} }
...@@ -3399,7 +3398,7 @@ qemuDomainSignalDeviceRemoval(virDomainObjPtr vm, ...@@ -3399,7 +3398,7 @@ qemuDomainSignalDeviceRemoval(virDomainObjPtr vm,
if (STREQ_NULLABLE(priv->unpluggingDevice, devAlias)) { if (STREQ_NULLABLE(priv->unpluggingDevice, devAlias)) {
qemuDomainResetDeviceRemoval(vm); qemuDomainResetDeviceRemoval(vm);
virCondSignal(&priv->unplugFinished); virDomainObjBroadcast(vm);
return true; return true;
} }
return false; return false;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册