From: Zebediah Figura <zfigura(a)codeweavers.com> --- dlls/wineusb.sys/unixlib.c | 9 +++++++++ dlls/wineusb.sys/wineusb.c | 8 -------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/dlls/wineusb.sys/unixlib.c b/dlls/wineusb.sys/unixlib.c index 091d85d1ef1..cfced53d9bf 100644 --- a/dlls/wineusb.sys/unixlib.c +++ b/dlls/wineusb.sys/unixlib.c @@ -173,12 +173,19 @@ static NTSTATUS usb_main_loop(void *args) TRACE("Starting libusb event thread.\n"); + if ((ret = libusb_init(NULL))) + { + ERR("Failed to initialize libusb: %s\n", libusb_strerror(ret)); + return STATUS_UNSUCCESSFUL; + } + if ((ret = libusb_hotplug_register_callback(NULL, LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED | LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT, LIBUSB_HOTPLUG_ENUMERATE, LIBUSB_HOTPLUG_MATCH_ANY, LIBUSB_HOTPLUG_MATCH_ANY, LIBUSB_HOTPLUG_MATCH_ANY, hotplug_cb, NULL, &hotplug_cb_handle))) { ERR("Failed to register callback: %s\n", libusb_strerror(ret)); + libusb_exit(NULL); return STATUS_UNSUCCESSFUL; } @@ -188,6 +195,8 @@ static NTSTATUS usb_main_loop(void *args) ERR("Error handling events: %s\n", libusb_strerror(ret)); } + libusb_exit(NULL); + queue_event(&shutdown_event); TRACE("Shutting down libusb event thread.\n"); diff --git a/dlls/wineusb.sys/wineusb.c b/dlls/wineusb.sys/wineusb.c index 49033c76213..474ee6e96a6 100644 --- a/dlls/wineusb.sys/wineusb.c +++ b/dlls/wineusb.sys/wineusb.c @@ -731,14 +731,12 @@ static NTSTATUS WINAPI driver_add_device(DRIVER_OBJECT *driver, DEVICE_OBJECT *p static void WINAPI driver_unload(DRIVER_OBJECT *driver) { - libusb_exit(NULL); } NTSTATUS WINAPI DriverEntry(DRIVER_OBJECT *driver, UNICODE_STRING *path) { NTSTATUS status; void *instance; - int err; TRACE("driver %p, path %s.\n", driver, debugstr_w(path->Buffer)); @@ -752,12 +750,6 @@ NTSTATUS WINAPI DriverEntry(DRIVER_OBJECT *driver, UNICODE_STRING *path) driver_obj = driver; - if ((err = libusb_init(NULL))) - { - ERR("Failed to initialize libusb: %s\n", libusb_strerror(err)); - return STATUS_UNSUCCESSFUL; - } - driver->DriverExtension->AddDevice = driver_add_device; driver->DriverUnload = driver_unload; driver->MajorFunction[IRP_MJ_PNP] = driver_pnp; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/440