linux: hotplug_enumerate and _disconnect take active_contexts_lock
authorHans de Goede <hdegoede@redhat.com>
Thu, 16 May 2013 14:56:40 +0000 (16:56 +0200)
committerHans de Goede <hdegoede@redhat.com>
Thu, 16 May 2013 15:18:33 +0000 (17:18 +0200)
Take the active_contexts_lock when enumerating over active_contexts.

Note that the active_contexts_lock is taken *before* the hotplug lock, as they
are taken in the same order in the libusb_init path.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
libusb/os/linux_usbfs.c
libusb/version_nano.h

index b29d780..7b9840f 100644 (file)
@@ -1184,6 +1184,7 @@ void linux_hotplug_enumerate(uint8_t busnum, uint8_t devaddr, const char *sys_na
 {
        struct libusb_context *ctx;
 
+       usbi_mutex_static_lock(&active_contexts_lock);
        usbi_mutex_static_lock(&hotplug_lock);
        list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) {
                if (usbi_get_device_by_session_id(ctx, busnum << 8 | devaddr)) {
@@ -1195,6 +1196,7 @@ void linux_hotplug_enumerate(uint8_t busnum, uint8_t devaddr, const char *sys_na
                linux_enumerate_device(ctx, busnum, devaddr, sys_name);
        }
        usbi_mutex_static_unlock(&hotplug_lock);
+       usbi_mutex_static_unlock(&active_contexts_lock);
 }
 
 void linux_hotplug_disconnected(uint8_t busnum, uint8_t devaddr, const char *sys_name)
@@ -1202,6 +1204,7 @@ void linux_hotplug_disconnected(uint8_t busnum, uint8_t devaddr, const char *sys
        struct libusb_context *ctx;
        struct libusb_device *dev;
 
+       usbi_mutex_static_lock(&active_contexts_lock);
        usbi_mutex_static_lock(&hotplug_lock);
        list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) {
                dev = usbi_get_device_by_session_id (ctx, busnum << 8 | devaddr);
@@ -1212,6 +1215,7 @@ void linux_hotplug_disconnected(uint8_t busnum, uint8_t devaddr, const char *sys
                }
        }
        usbi_mutex_static_unlock(&hotplug_lock);
+       usbi_mutex_static_unlock(&active_contexts_lock);
 }
 
 #if !defined(USE_UDEV)
index 8b8711e..0033866 100644 (file)
@@ -1 +1 @@
-#define LIBUSB_NANO 10680
+#define LIBUSB_NANO 10681