/* how many times have we initted (and not exited) ? */
static volatile int init_count = 0;
-/* Protects init_count and serializes scan_devices versus the hotplug-thread */
-static usbi_mutex_static_t hotplug_lock = USBI_MUTEX_INITIALIZER;
+/* Serialize hotplug start/stop, scan-devices, event-thread, and poll */
+usbi_mutex_static_t linux_hotplug_lock = USBI_MUTEX_INITIALIZER;
static int linux_start_event_monitor(void);
static int linux_stop_event_monitor(void);
if (sysfs_has_descriptors)
usbi_dbg("sysfs has complete descriptors");
- usbi_mutex_static_lock(&hotplug_lock);
+ usbi_mutex_static_lock(&linux_hotplug_lock);
r = LIBUSB_SUCCESS;
if (init_count == 0) {
/* start up hotplug event handler */
linux_stop_event_monitor();
} else
usbi_err(ctx, "error starting hotplug event monitor");
- usbi_mutex_static_unlock(&hotplug_lock);
+ usbi_mutex_static_unlock(&linux_hotplug_lock);
return r;
}
static void op_exit(void)
{
- usbi_mutex_static_lock(&hotplug_lock);
+ usbi_mutex_static_lock(&linux_hotplug_lock);
assert(init_count != 0);
if (!--init_count) {
/* tear down event handler */
(void)linux_stop_event_monitor();
}
- usbi_mutex_static_unlock(&hotplug_lock);
+ usbi_mutex_static_unlock(&linux_hotplug_lock);
}
static int linux_start_event_monitor(void)
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) {
linux_enumerate_device(ctx, busnum, devaddr, sys_name);
}
- usbi_mutex_static_unlock(&hotplug_lock);
usbi_mutex_static_unlock(&active_contexts_lock);
}
unsigned long session_id = busnum << 8 | devaddr;
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, session_id);
if (NULL != dev) {
usbi_dbg("device not found for session %x", session_id);
}
}
- usbi_mutex_static_unlock(&hotplug_lock);
usbi_mutex_static_unlock(&active_contexts_lock);
}