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>
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 @@
 		_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 @@
 
 	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