This patch splits udevEventHandleCallback in two (introduces
udevEventHandleThread) in order to be later able to refactor the latter
to actually become a detached 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(a)redhat.com>
---
src/node_device/node_device_udev.c | 27 +++++++++++++++++++++++----
1 file changed, 23 insertions(+), 4 deletions(-)
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
index 6c7f887ed..e144472f1 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -1646,13 +1646,11 @@ udevEventCheckMonitorFD(struct udev_monitor *udev_monitor,
static void
-udevEventHandleCallback(int watch ATTRIBUTE_UNUSED,
- int fd,
- int events ATTRIBUTE_UNUSED,
- void *data ATTRIBUTE_UNUSED)
+udevEventHandleThread(void *opaque)
{
struct udev_device *device = NULL;
struct udev_monitor *udev_monitor = NULL;
+ int fd = (intptr_t) opaque;
nodeDeviceLock();
udev_monitor = DRV_STATE_UDEV_MONITOR(driver);
@@ -1676,6 +1674,27 @@ udevEventHandleCallback(int watch ATTRIBUTE_UNUSED,
}
+static void
+udevEventHandleCallback(int watch ATTRIBUTE_UNUSED,
+ int fd,
+ int events ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED)
+{
+ struct udev_monitor *udev_monitor = NULL;
+
+ nodeDeviceLock();
+ udev_monitor = DRV_STATE_UDEV_MONITOR(driver);
+
+ if (!udevEventCheckMonitorFD(udev_monitor, fd)) {
+ nodeDeviceUnlock();
+ return;
+ }
+ nodeDeviceUnlock();
+
+ udevEventHandleThread((void *)(intptr_t) fd);
+}
+
+
/* DMI is intel-compatible specific */
#if defined(__x86_64__) || defined(__i386__) || defined(__amd64__)
static void
--
2.13.5