]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Use domain condition for device removal signaling
authorPeter Krempa <pkrempa@redhat.com>
Mon, 4 Apr 2016 11:59:48 +0000 (13:59 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 13 Apr 2016 11:26:29 +0000 (13:26 +0200)
No need to keep two separate conditions. A slight juggling of return
values is needed to accomodate virDomainObjWaitUntil.

src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
src/qemu/qemu_hotplug.c

index 223154d8208ad9d4ac3b1bb327e5c8810be42cf5..5d54fffcfb98f1fe095415272a6a13fe48a70584 100644 (file)
@@ -839,9 +839,6 @@ qemuDomainObjPrivateAlloc(void)
         goto error;
     }
 
-    if (virCondInit(&priv->unplugFinished) < 0)
-        goto error;
-
     if (!(priv->devs = virChrdevAlloc()))
         goto error;
 
@@ -871,7 +868,6 @@ qemuDomainObjPrivateFree(void *data)
     VIR_FREE(priv->lockState);
     VIR_FREE(priv->origname);
 
-    virCondDestroy(&priv->unplugFinished);
     virStringFreeList(priv->qemuDevices);
     virChrdevFree(priv->devs);
 
index 80b6593fdc0c04e64c6d19aa4517dc22372c5ef8..77b5eb5d2f224ffc1a8efaca202876eaf7870016 100644 (file)
@@ -199,7 +199,6 @@ struct _qemuDomainObjPrivate {
 
     virPerfPtr perf;
 
-    virCond unplugFinished; /* signals that unpluggingDevice was unplugged */
     const char *unpluggingDevice; /* alias of the device that is being unplugged */
     char **qemuDevices; /* NULL-terminated list of devices aliases known to QEMU */
 
index 7faf9882699ef2f1706b8164ebd1a2da0c0eaf8b..c62b8bc8ca8ee9b613bb0f623593b4feb8008f26 100644 (file)
@@ -3361,6 +3361,7 @@ qemuDomainWaitForDeviceRemoval(virDomainObjPtr vm)
 {
     qemuDomainObjPrivatePtr priv = vm->privateData;
     unsigned long long until;
+    int rc;
 
     if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE_DEL_EVENT))
         return 1;
@@ -3370,15 +3371,13 @@ qemuDomainWaitForDeviceRemoval(virDomainObjPtr vm)
     until += qemuDomainRemoveDeviceWaitTime;
 
     while (priv->unpluggingDevice) {
-        if (virCondWaitUntil(&priv->unplugFinished,
-                             &vm->parent.lock, until) < 0) {
-            if (errno == ETIMEDOUT) {
-                return 0;
-            } else {
-                VIR_WARN("Failed to wait on unplug condition for domain '%s' "
-                         "device '%s'", vm->def->name, priv->unpluggingDevice);
-                return 1;
-            }
+        if ((rc = virDomainObjWaitUntil(vm, until)) == 1)
+            return 0;
+
+        if (rc < 0) {
+            VIR_WARN("Failed to wait on unplug condition for domain '%s' "
+                     "device '%s'", vm->def->name, priv->unpluggingDevice);
+            return 1;
         }
     }
 
@@ -3399,7 +3398,7 @@ qemuDomainSignalDeviceRemoval(virDomainObjPtr vm,
 
     if (STREQ_NULLABLE(priv->unpluggingDevice, devAlias)) {
         qemuDomainResetDeviceRemoval(vm);
-        virCondSignal(&priv->unplugFinished);
+        virDomainObjBroadcast(vm);
         return true;
     }
     return false;