]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
nodedev: Mark device initialization complete even in case of an error
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 13 Apr 2021 08:45:24 +0000 (10:45 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 14 Apr 2021 08:17:32 +0000 (10:17 +0200)
To speed up nodedev driver initialization, the device enumeration
is done in a separate thread. Once finished, the thread sets a
boolean variable that allows public APIs to be called (instead of
waiting for the thread to finish).

However, if there's an error in the device enumeration thread
then the control jumps over at the 'error' label and the boolean
is never set. This means, that any virNodeDev*() API is stuck
forever. Mark the initialization as complete (the thread is
quitting anyway) and let the APIs proceed.

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

index 84785d9e1e3e3f9a693f00e2c2617665351f606f..658170a76756e486a0ce82d61a49a71c05e06d11 100644 (file)
@@ -1982,6 +1982,7 @@ nodeStateInitializeEnumerate(void *opaque)
     if (nodeDeviceUpdateMediatedDevices() != 0)
         goto error;
 
+ cleanup:
     nodeDeviceLock();
     driver->initialized = true;
     virCondBroadcast(&driver->initCond);
@@ -1996,6 +1997,8 @@ nodeStateInitializeEnumerate(void *opaque)
     priv->threadQuit = true;
     virCondSignal(&priv->threadCond);
     virObjectUnlock(priv);
+
+    goto cleanup;
 }