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 <hdegoede@redhat.com>
This commit is contained in:
Hans de Goede 2019-01-17 14:52:41 +01:00
parent ccdb1d1fe1
commit f9e376797a

View file

@ -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);
}