Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/wineusb.sys/wineusb.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/dlls/wineusb.sys/wineusb.c b/dlls/wineusb.sys/wineusb.c index 8fb1d75f121..a72095409ff 100644 --- a/dlls/wineusb.sys/wineusb.c +++ b/dlls/wineusb.sys/wineusb.c @@ -145,7 +145,6 @@ static void remove_usb_device(libusb_device *libusb_device) if (device->libusb_device == libusb_device) { list_remove(&device->entry); - device->removed = TRUE; break; } } @@ -402,26 +401,24 @@ static NTSTATUS pdo_pnp(DEVICE_OBJECT *device_obj, IRP *irp) }
case IRP_MN_START_DEVICE: - case IRP_MN_SURPRISE_REMOVAL: ret = STATUS_SUCCESS; break;
- case IRP_MN_REMOVE_DEVICE: + case IRP_MN_SURPRISE_REMOVAL: EnterCriticalSection(&wineusb_cs); remove_pending_irps(device); + device->removed = TRUE; LeaveCriticalSection(&wineusb_cs); + ret = STATUS_SUCCESS; + break;
- if (device->removed) - { - libusb_unref_device(device->libusb_device); - libusb_close(device->handle); + case IRP_MN_REMOVE_DEVICE: + remove_pending_irps(device);
- irp->IoStatus.Status = STATUS_SUCCESS; - IoCompleteRequest(irp, IO_NO_INCREMENT); - IoDeleteDevice(device->device_obj); - return STATUS_SUCCESS; - } + libusb_unref_device(device->libusb_device); + libusb_close(device->handle);
+ IoDeleteDevice(device->device_obj); ret = STATUS_SUCCESS; break;