From: Zebediah Figura zfigura@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;