From 22b5ce9548393ba2ff73ee234ecd82eeaf0ef6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Tue, 25 Oct 2016 17:28:03 +0900 Subject: [PATCH] Consume all available udev events at once We get multiple udev events for actions like docking a laptop into its station or plugging a monitor to the station. By consuming as many events as we can, we reduce the number of output re-evalutions. It depends on the timing how many events can be consumed at once. (Inspired by xserver commit 363f4273dd4aec3e26cc57ecb6c20f27e6c813d8) Reviewed-by: Alex Deucher --- src/drmmode_display.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/drmmode_display.c b/src/drmmode_display.c index a5a34fdb..9cf48467 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -2656,12 +2656,15 @@ drmmode_handle_uevents(int fd, void *closure) drmmode_ptr drmmode = closure; ScrnInfoPtr scrn = drmmode->scrn; struct udev_device *dev; - dev = udev_monitor_receive_device(drmmode->uevent_monitor); - if (!dev) - return; + Bool received = FALSE; - radeon_mode_hotplug(scrn, drmmode); - udev_device_unref(dev); + while ((dev = udev_monitor_receive_device(drmmode->uevent_monitor))) { + udev_device_unref(dev); + received = TRUE; + } + + if (received) + radeon_mode_hotplug(scrn, drmmode); } #endif