mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-23 13:05:27 +00:00
Fix race condition in HAL driver startup
There is a race condition in HAL driver startup where the callback can get triggered before we have finished startup. This then causes a deadlock in the driver. * src/node_device/node_device_hal.c: RElease driver lock before registering DBus callbacks
This commit is contained in:
parent
f24e67d24f
commit
fd2090cdb9
@ -742,6 +742,16 @@ static int halDeviceMonitorStartup(int privileged ATTRIBUTE_UNUSED)
|
|||||||
goto failure;
|
goto failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Populate with known devices */
|
||||||
|
driverState->privateData = hal_ctx;
|
||||||
|
|
||||||
|
/* We need to unlock state now, since setting these callbacks cause
|
||||||
|
* a dbus RPC call, and while this call is waiting for the reply,
|
||||||
|
* a signal may already arrive, triggering the callback and thus
|
||||||
|
* requiring the lock !
|
||||||
|
*/
|
||||||
|
nodeDeviceUnlock(driverState);
|
||||||
|
|
||||||
/* Register HAL event callbacks */
|
/* Register HAL event callbacks */
|
||||||
if (!libhal_ctx_set_device_added(hal_ctx, device_added) ||
|
if (!libhal_ctx_set_device_added(hal_ctx, device_added) ||
|
||||||
!libhal_ctx_set_device_removed(hal_ctx, device_removed) ||
|
!libhal_ctx_set_device_removed(hal_ctx, device_removed) ||
|
||||||
@ -753,10 +763,6 @@ static int halDeviceMonitorStartup(int privileged ATTRIBUTE_UNUSED)
|
|||||||
goto failure;
|
goto failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Populate with known devices */
|
|
||||||
driverState->privateData = hal_ctx;
|
|
||||||
|
|
||||||
nodeDeviceUnlock(driverState);
|
|
||||||
udi = libhal_get_all_devices(hal_ctx, &num_devs, &err);
|
udi = libhal_get_all_devices(hal_ctx, &num_devs, &err);
|
||||||
if (udi == NULL) {
|
if (udi == NULL) {
|
||||||
VIR_ERROR0("libhal_get_all_devices failed\n");
|
VIR_ERROR0("libhal_get_all_devices failed\n");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user