Module: wine Branch: master Commit: 1215bc805f50b7c3d11a89656d175be114059e1e URL: https://gitlab.winehq.org/wine/wine/-/commit/1215bc805f50b7c3d11a89656d175be...
Author: Zebediah Figura zfigura@codeweavers.com Date: Sat Jul 9 18:13:37 2022 -0500
wineusb.sys: Fully initialize the device before adding it to the device list.
Do not rely on IoInvalidateDeviceRelations() to initialize the device; it's supposed to be asynchronous.
---
dlls/wineusb.sys/wineusb.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/wineusb.sys/wineusb.c b/dlls/wineusb.sys/wineusb.c index 0b8af43a3dc..396591db451 100644 --- a/dlls/wineusb.sys/wineusb.c +++ b/dlls/wineusb.sys/wineusb.c @@ -255,11 +255,7 @@ static void add_unix_device(struct unix_device *unix_device) device->device_obj = device_obj; device->unix_device = unix_device; InitializeListHead(&device->irp_list); - - EnterCriticalSection(&wineusb_cs); - list_add_tail(&device_list, &device->entry); device->removed = FALSE; - LeaveCriticalSection(&wineusb_cs);
device->class = device_desc.bDeviceClass; device->subclass = device_desc.bDeviceSubClass; @@ -268,6 +264,10 @@ static void add_unix_device(struct unix_device *unix_device) device->product = device_desc.idProduct; device->revision = device_desc.bcdDevice;
+ EnterCriticalSection(&wineusb_cs); + list_add_tail(&device_list, &device->entry); + LeaveCriticalSection(&wineusb_cs); + if (!(ret = libusb_get_active_config_descriptor(libusb_device, &config_desc))) { /* Create new devices for interfaces of composite devices.