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 <alexander.deucher@amd.com>
This commit is contained in:
Michel Dänzer
2016-10-25 17:28:03 +09:00
committed by Michel Dänzer
parent 82d3c8f550
commit 22b5ce9548

View File

@@ -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