diff options
author | Hans de Goede <hdegoede@redhat.com> | 2013-05-16 16:56:40 +0200 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2013-05-16 17:18:33 +0200 |
commit | 9f679a9c9abc430614f9d6654c40bee9c64c84be (patch) | |
tree | 97933f81dadd6dda2aa9dcc6e8b0d02da9b6b7a4 | |
parent | 2d08a3e6da873cab069780f7e6c478299afe759a (diff) | |
download | libusb-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.c | 4 | ||||
-rw-r--r-- | libusb/version_nano.h | 2 |
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 |