summaryrefslogtreecommitdiff
path: root/libusb/core.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2013-05-24 16:15:51 +0200
committerHans de Goede <hdegoede@redhat.com>2013-05-30 14:20:36 +0200
commitcedc7f6e289c427c84a9175045b06614be56ec5a (patch)
tree50837d92d28e3aac578ba4c20a531c4fc1245b3f /libusb/core.c
parent7ced70e14968bd6869a561d2cf8e7ac5a1df8938 (diff)
downloadlibusb-cedc7f6e289c427c84a9175045b06614be56ec5a.tar.gz
hotplug: Add a hotplug_poll backend function
Apps which were written before hotplug support, may listen for hotplug events on their own and call libusb_get_device_list on device addition. In this case libusb_get_device_list will likely return a list without the new device in there, as the hotplug event thread will still be busy enumerating the device, which may take a while, or may not even have seen the event yet. To avoid this add a new hotplug_poll backend function and make libusb_get_device_list call a this before copying ctx->usb_devs to the user. In this function the backend should ensure any pending hotplug events are fully processed before returning. This patch implements hotplug_poll for linux, it should probably be also implemented for darwin. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'libusb/core.c')
-rw-r--r--libusb/core.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/libusb/core.c b/libusb/core.c
index 88757f8..1c3748d 100644
--- a/libusb/core.c
+++ b/libusb/core.c
@@ -654,6 +654,9 @@ ssize_t API_EXPORTED libusb_get_device_list(libusb_context *ctx,
/* backend provides hotplug support */
struct libusb_device *dev;
+ if (usbi_backend->hotplug_poll)
+ usbi_backend->hotplug_poll();
+
usbi_mutex_lock(&ctx->usb_devs_lock);
list_for_each_entry(dev, &ctx->usb_devs, list, struct libusb_device) {
discdevs = discovered_devs_append(discdevs, dev);