]> xenbits.xensource.com Git - libvirt.git/commitdiff
nodedev: udev: Split udevEventHandleCallback in two functions
authorErik Skultety <eskultet@redhat.com>
Wed, 28 Jun 2017 12:20:37 +0000 (14:20 +0200)
committerErik Skultety <eskultet@redhat.com>
Thu, 19 Oct 2017 06:54:53 +0000 (08:54 +0200)
This patch splits udevEventHandleCallback in two (introduces
udevEventHandleThread) in order to be later able to refactor the latter
to actually become a normal thread which will wait some time for the
kernel to create the whole sysfs tree for a device as we cannot do that
in the event loop directly.

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

index c5ff6a08875478b959a1d116d8c4ea66c2c266c0..5e5fd9ec8b87305f9476910dcf4a303b988e1657 100644 (file)
@@ -1679,12 +1679,10 @@ udevEventMonitorSanityCheck(udevEventDataPtr priv,
 
 
 static void
-udevEventHandleCallback(int watch ATTRIBUTE_UNUSED,
-                        int fd,
-                        int events ATTRIBUTE_UNUSED,
-                        void *data ATTRIBUTE_UNUSED)
+udevEventHandleThread(void *opaque)
 {
     udevEventDataPtr priv = driver->privateData;
+    int fd = (intptr_t) opaque;
     struct udev_device *device = NULL;
 
     virObjectLock(priv);
@@ -1708,6 +1706,25 @@ udevEventHandleCallback(int watch ATTRIBUTE_UNUSED,
 }
 
 
+static void
+udevEventHandleCallback(int watch ATTRIBUTE_UNUSED,
+                        int fd,
+                        int events ATTRIBUTE_UNUSED,
+                        void *data ATTRIBUTE_UNUSED)
+{
+    udevEventDataPtr priv = driver->privateData;
+
+    virObjectLock(priv);
+    if (!udevEventMonitorSanityCheck(priv, fd)) {
+        virObjectUnlock(priv);
+        return;
+    }
+    virObjectUnlock(priv);
+
+    udevEventHandleThread((void *)(intptr_t) fd);
+}
+
+
 /* DMI is intel-compatible specific */
 #if defined(__x86_64__) || defined(__i386__) || defined(__amd64__)
 static void