[PATCH 2/5] wineusb.sys: Handle IRP_MN_SURPRISE_REMOVAL and set removed flag.
Rémi Bernon
rbernon at codeweavers.com
Thu Jul 1 02:51:23 CDT 2021
Signed-off-by: Rémi Bernon <rbernon at 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;
--
2.32.0
More information about the wine-devel
mailing list