From 851b2570532174779670587b58240f5d91ddec36 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Thu, 16 May 2013 16:32:33 +0200 Subject: [PATCH] core: Add ctx to the active context list before backend->init As soon as backend->init has completed hotplug events may fire, and they will not get processed on the created context until it has been added to the active_context list. Signed-off-by: Hans de Goede --- libusb/core.c | 20 +++++++++++--------- libusb/version_nano.h | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/libusb/core.c b/libusb/core.c index 280bb21..e3f9f51 100644 --- a/libusb/core.c +++ b/libusb/core.c @@ -1767,6 +1767,14 @@ int API_EXPORTED libusb_init(libusb_context **context) list_init(&ctx->open_devs); list_init(&ctx->hotplug_cbs); + usbi_mutex_static_lock(&active_contexts_lock); + if (first_init) { + first_init = 0; + list_init (&active_contexts_list); + } + list_add (&ctx->list, &active_contexts_list); + usbi_mutex_static_unlock(&active_contexts_lock); + if (usbi_backend->init) { r = usbi_backend->init(ctx); if (r) @@ -1789,21 +1797,15 @@ int API_EXPORTED libusb_init(libusb_context **context) } usbi_mutex_static_unlock(&default_context_lock); - usbi_mutex_static_lock(&active_contexts_lock); - if (first_init) { - first_init = 0; - list_init (&active_contexts_list); - } - - list_add (&ctx->list, &active_contexts_list); - usbi_mutex_static_unlock(&active_contexts_lock); - return 0; err_destroy_mutex: usbi_mutex_destroy(&ctx->open_devs_lock); usbi_mutex_destroy(&ctx->usb_devs_lock); err_free_ctx: + usbi_mutex_static_lock(&active_contexts_lock); + list_del (&ctx->list); + usbi_mutex_static_unlock(&active_contexts_lock); usbi_mutex_lock(&ctx->usb_devs_lock); list_for_each_entry_safe(dev, next, &ctx->usb_devs, list, struct libusb_device) { list_del(&dev->list); diff --git a/libusb/version_nano.h b/libusb/version_nano.h index fce37d3..4a6dca1 100644 --- a/libusb/version_nano.h +++ b/libusb/version_nano.h @@ -1 +1 @@ -#define LIBUSB_NANO 10676 +#define LIBUSB_NANO 10677 -- 2.7.4