[libvirt] [PATCH] libvirtd: fix potential deadlock when starting vm
Bingsong Si
owen.si at ucloud.cn
Thu Oct 11 08:13:08 UTC 2018
On CentOS 6, udev_monitor_receive_device will block until the socket becomes
readable, udevEventHandleThread will hold the lock all the time and
udevEventHandleCallback hard to get the lock, will block the event poll.
To fix this, set dataReady to false after receive an udev event.
Signed-off-by: Bingsong Si <owen.si at ucloud.cn>
---
src/node_device/node_device_udev.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
index 22897591de..ce1101d7cc 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -1616,6 +1616,7 @@ udevEventHandleThread(void *opaque ATTRIBUTE_UNUSED)
errno = 0;
device = udev_monitor_receive_device(priv->udev_monitor);
+ priv->dataReady = false;
virObjectUnlock(priv);
if (!device) {
@@ -1637,10 +1638,6 @@ udevEventHandleThread(void *opaque ATTRIBUTE_UNUSED)
return;
}
- virObjectLock(priv);
- priv->dataReady = false;
- virObjectUnlock(priv);
-
continue;
}
--
2.18.0
More information about the libvir-list
mailing list