[PATCH] libvirtd: fix potential deadlock when starting vm

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxx>
---
 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


--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux