From: Nathan Hjelm Date: Tue, 27 Jul 2021 05:23:12 +0000 (-0600) Subject: core: set default backend options before calling backend init X-Git-Tag: upstream/1.0.25~46 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e568db9f722f35b83ec31bbdfd79e7471163ce23;p=platform%2Fupstream%2Flibusb.git 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 --- 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