summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2013-05-16 16:56:40 +0200
committerHans de Goede <hdegoede@redhat.com>2013-05-16 17:18:33 +0200
commit9f679a9c9abc430614f9d6654c40bee9c64c84be (patch)
tree97933f81dadd6dda2aa9dcc6e8b0d02da9b6b7a4
parent2d08a3e6da873cab069780f7e6c478299afe759a (diff)
downloadlibusb-9f679a9c9abc430614f9d6654c40bee9c64c84be.tar.gz
linux: hotplug_enumerate and _disconnect take active_contexts_lock
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>
-rw-r--r--libusb/os/linux_usbfs.c4
-rw-r--r--libusb/version_nano.h2
2 files changed, 5 insertions, 1 deletions
diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c
index b29d780..7b9840f 100644
--- a/libusb/os/linux_usbfs.c
+++ b/libusb/os/linux_usbfs.c
@@ -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)
diff --git a/libusb/version_nano.h b/libusb/version_nano.h
index 8b8711e..0033866 100644
--- a/libusb/version_nano.h
+++ b/libusb/version_nano.h
@@ -1 +1 @@
-#define LIBUSB_NANO 10680
+#define LIBUSB_NANO 10681