mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
nodedev: Mark device initialization complete even in case of an error
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>
This commit is contained in:
parent
77a13eb9ac
commit
54d97f020b
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user