}
pthread_mutex_lock(&hotplug_lock);
+ r = LIBUSB_SUCCESS;
if (!init_count++) {
/* start up hotplug event handler */
r = linux_start_event_monitor();
if (LIBUSB_SUCCESS != r) {
usbi_err(ctx, "error starting hotplug event monitor");
- return r;
}
}
+ if (r == LIBUSB_SUCCESS)
+ r = linux_scan_devices(ctx);
pthread_mutex_unlock(&hotplug_lock);
- r = linux_scan_devices(ctx);
-
return r;
}
{
struct libusb_context *ctx;
+ pthread_mutex_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)) {
/* device already exists in the context */
linux_enumerate_device(ctx, busnum, devaddr, sys_name);
}
+ pthread_mutex_unlock(&hotplug_lock);
}
void linux_hotplug_disconnected(uint8_t busnum, uint8_t devaddr, const char *sys_name)
struct libusb_context *ctx;
struct libusb_device *dev;
+ pthread_mutex_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);
if (NULL != dev) {
usbi_err(ctx, "device not found for session %x", busnum << 8 | devaddr);
}
}
+ pthread_mutex_unlock(&hotplug_lock);
}
#if !defined(USE_UDEV)