summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Hjelm <hjelmn@google.com>2021-07-26 23:23:12 -0600
committerNathan Hjelm <hjelmn@google.com>2021-07-26 23:23:12 -0600
commite568db9f722f35b83ec31bbdfd79e7471163ce23 (patch)
tree288b0e7ac6a691dd08f3bfc322d8f220e210d2a7
parenta25cfe5f1a87c0483218c92c986df20830d4ad8f (diff)
downloadlibusb-e568db9f722f35b83ec31bbdfd79e7471163ce23.tar.gz
core: set default backend options before calling backend init
This commit restores the previous behavior with regards to setting some backend options and restores the ability to set default context options before libusb_init. None of the backends use anything set in init in their set_option function so this should be safe with all backends and options. References #942 Signed-off-by: Nathan Hjelm <hjelmn@google.com>
-rw-r--r--libusb/core.c30
-rw-r--r--libusb/version_nano.h2
2 files changed, 16 insertions, 16 deletions
diff --git a/libusb/core.c b/libusb/core.c
index 4ec410b..f0844bf 100644
--- a/libusb/core.c
+++ b/libusb/core.c
@@ -2308,21 +2308,30 @@ int API_EXPORTED libusb_init(libusb_context **ctx)
_ctx->debug_fixed = 1;
#endif
+ usbi_mutex_init(&_ctx->usb_devs_lock);
+ usbi_mutex_init(&_ctx->open_devs_lock);
+ list_init(&_ctx->usb_devs);
+ list_init(&_ctx->open_devs);
+
/* default context should be initialized before calling usbi_dbg */
if (!ctx) {
usbi_default_context = _ctx;
default_context_refcnt = 1;
usbi_dbg(usbi_default_context, "created default context");
+
+ for (enum libusb_option option = 0 ; option < LIBUSB_OPTION_MAX ; option++) {
+ if (LIBUSB_OPTION_LOG_LEVEL == option || !default_context_options[option].is_set) {
+ continue;
+ }
+ r = libusb_set_option(_ctx, option);
+ if (LIBUSB_SUCCESS != r)
+ goto err_free_ctx;
+ }
}
usbi_dbg(_ctx, "libusb v%u.%u.%u.%u%s", libusb_version_internal.major, libusb_version_internal.minor,
libusb_version_internal.micro, libusb_version_internal.nano, libusb_version_internal.rc);
- usbi_mutex_init(&_ctx->usb_devs_lock);
- usbi_mutex_init(&_ctx->open_devs_lock);
- list_init(&_ctx->usb_devs);
- list_init(&_ctx->open_devs);
-
r = usbi_io_init(_ctx);
if (r < 0) {
usbi_mutex_static_unlock(&default_context_lock);
@@ -2341,16 +2350,7 @@ int API_EXPORTED libusb_init(libusb_context **ctx)
usbi_hotplug_init(_ctx);
- if (!ctx) {
- for (enum libusb_option option = 0 ; option < LIBUSB_OPTION_MAX ; option++) {
- if (LIBUSB_OPTION_LOG_LEVEL == option || !default_context_options[option].is_set) {
- continue;
- }
- r = libusb_set_option(_ctx, option);
- if (LIBUSB_SUCCESS != r)
- goto err_io_exit;
- }
- } else
+ if (ctx)
*ctx = _ctx;
usbi_mutex_static_unlock(&default_context_lock);
diff --git a/libusb/version_nano.h b/libusb/version_nano.h
index 88f37e6..a2c106c 100644
--- a/libusb/version_nano.h
+++ b/libusb/version_nano.h
@@ -1 +1 @@
-#define LIBUSB_NANO 11645
+#define LIBUSB_NANO 11646