]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
nodedev: Signal initCond with driver locked
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 13 Apr 2021 08:52:07 +0000 (10:52 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 13 Apr 2021 15:34:42 +0000 (17:34 +0200)
This is more academic dispute than a real bug, but this is taken
from pthread_cond_broadcast(3p) man:

  The pthread_cond_broadcast() or pthread_cond_signal() functions
  may be called by a thread whether or not it currently owns the
  mutex that threads calling pthread_cond_wait() or
  pthread_cond_timedwait() have associated with the condition
  variable during their waits; however, if predictable scheduling
  behavior is required, then that mutex shall be locked by the
  thread calling pthread_cond_broadcast() or
  pthread_cond_signal().

Therefore, broadcast the initCond while the nodedev driver is
still locked.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
src/node_device/node_device_udev.c

index 325ec5b0348711392c351749792e45372aa6ac20..84785d9e1e3e3f9a693f00e2c2617665351f606f 100644 (file)
@@ -1984,8 +1984,8 @@ nodeStateInitializeEnumerate(void *opaque)
 
     nodeDeviceLock();
     driver->initialized = true;
-    nodeDeviceUnlock();
     virCondBroadcast(&driver->initCond);
+    nodeDeviceUnlock();
 
     return;