In libusb (1.0.26), I found this:
diff --git a/libusb/os/linux_udev.c b/libusb/os/linux_udev.c index 9ec9eb17..66e27244 100644 --- a/libusb/os/linux_udev.c +++ b/libusb/os/linux_udev.c @@ -194,9 +194,11 @@ static void *linux_udev_event_thread_main(void *arg) } if (fds[1].revents) { usbi_mutex_static_lock(&linux_hotplug_lock); - udev_dev = udev_monitor_receive_device(udev_monitor); - if (udev_dev) - udev_hotplug_event(udev_dev); + do { + udev_dev = udev_monitor_receive_device(udev_monitor); + if (udev_dev) + udev_hotplug_event(udev_dev); + } while (udev_dev); usbi_mutex_static_unlock(&linux_hotplug_lock); } }