The initial enumeration should not result in hotplug events to be fired.
This is just a convenience though, API users still need to be prepared
to be notified a second time for a device that was plugged in between
libusb_init and libusb_hotplug_register_callback.
This regressed with commit
6929b82 ("Fix segmentation fault in
libusb_init() if usbi_backend.init() fails"). This commit avoids the
mentioned segmentation fault by avoiding to clean up the hotplug code if
it was not yet initialised.
Fixes #1082
Closes #1090
References #989
[Cherrypick from mainline commit
0846456 ("core: Suppress hotplug events during initial enumeration")]
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Change-Id: Idbae2c394ba01694f9e6006d8a52036f6c73da77
list_add(&_ctx->list, &active_contexts_list);
usbi_mutex_static_unlock(&active_contexts_lock);
- usbi_hotplug_init(_ctx);
-
if (usbi_backend.init) {
r = usbi_backend.init(_ctx);
if (r)
goto err_io_exit;
}
+ /* Initialize hotplug after the initial enumeration is done. */
+ usbi_hotplug_init(_ctx);
+
if (ctx)
*ctx = _ctx;
if (!libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG))
return;
+ if (!usbi_atomic_load(&ctx->hotplug_ready))
+ return;
+
/* free all registered hotplug callbacks */
for_each_hotplug_cb_safe(ctx, hotplug_cb, next_cb) {
list_del(&hotplug_cb->list);
-#define LIBUSB_NANO 11694
+#define LIBUSB_NANO 11695