diff options
author | Nathan Hjelm <hjelmn@google.com> | 2021-07-26 23:23:12 -0600 |
---|---|---|
committer | Nathan Hjelm <hjelmn@google.com> | 2021-07-26 23:23:12 -0600 |
commit | e568db9f722f35b83ec31bbdfd79e7471163ce23 (patch) | |
tree | 288b0e7ac6a691dd08f3bfc322d8f220e210d2a7 | |
parent | a25cfe5f1a87c0483218c92c986df20830d4ad8f (diff) | |
download | libusb-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.c | 30 | ||||
-rw-r--r-- | libusb/version_nano.h | 2 |
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 |