From f9e376797a91ad5fbc1f8e8e4aea778f4f22397c Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Thu, 17 Jan 2019 14:52:41 +0100 Subject: [PATCH] ply-device-manager: Consume all events in one go Drm devices generate a bunch of add and change events when the kms driver loads, consume these all in one go. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-device-manager.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c index 8ceee10d..028bf4ad 100644 --- a/src/libply-splash-core/ply-device-manager.c +++ b/src/libply-splash-core/ply-device-manager.c @@ -371,7 +371,7 @@ create_devices_for_subsystem (ply_device_manager_t *manager, return found_device; } -static void +static bool on_udev_event (ply_device_manager_t *manager) { struct udev_device *device; @@ -379,14 +379,14 @@ on_udev_event (ply_device_manager_t *manager) device = udev_monitor_receive_device (manager->udev_monitor); if (device == NULL) - return; + return false; action = udev_device_get_action (device); ply_trace ("got %s event for device %s", action, udev_device_get_sysname (device)); if (action == NULL) - return; + return false; if (strcmp (action, "add") == 0) { const char *subsystem; @@ -406,6 +406,14 @@ on_udev_event (ply_device_manager_t *manager) } udev_device_unref (device); + return true; +} + +static void +on_udev_event_loop (ply_device_manager_t *manager) +{ + /* Call on_udev_event until all events are consumed */ + while (on_udev_event (manager)) {} } static void @@ -435,7 +443,7 @@ watch_for_udev_events (ply_device_manager_t *manager) fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA, (ply_event_handler_t) - on_udev_event, + on_udev_event_loop, NULL, manager); } -- 2.47.3