[USB-BRINGUP-TRUNK]
authorCameron Gutman <aicommander@gmail.com>
Mon, 23 Jan 2012 00:39:28 +0000 (00:39 +0000)
committerCameron Gutman <aicommander@gmail.com>
Mon, 23 Jan 2012 00:39:28 +0000 (00:39 +0000)
- Fix a broken check that resulted in freeing the same device object twice
- Enable the IoDetachDevice call in usbstor now that the kernel bug is fixed

svn path=/branches/usb-bringup-trunk/; revision=55086

drivers/usb/usbstor/fdo.c
ntoskrnl/io/iomgr/device.c

index 08efa25..9b44e13 100644 (file)
@@ -135,7 +135,7 @@ USBSTOR_FdoHandleRemoveDevice(
     Status = IoCallDriver(DeviceExtension->LowerDeviceObject, Irp);
 
     /* Detach from the device stack */
     Status = IoCallDriver(DeviceExtension->LowerDeviceObject, Irp);
 
     /* Detach from the device stack */
-    /* IoDetachDevice(DeviceExtension->LowerDeviceObject); */ //This crashes for some reason during unload
+    IoDetachDevice(DeviceExtension->LowerDeviceObject);
 
     /* Delete the device object */
     IoDeleteDevice(DeviceObject);
 
     /* Delete the device object */
     IoDeleteDevice(DeviceObject);
index 97643b6..44a7a9b 100644 (file)
@@ -420,10 +420,10 @@ IopUnloadDevice(IN PDEVICE_OBJECT DeviceObject)
 
         /*
          * Check if we have an attached device and fail if we're attached
 
         /*
          * Check if we have an attached device and fail if we're attached
-         * and still have a reference count.
+         * or still have a reference count.
          */
         AttachedDeviceObject = DeviceObject->AttachedDevice;
          */
         AttachedDeviceObject = DeviceObject->AttachedDevice;
-        if ((AttachedDeviceObject) && (DeviceObject->ReferenceCount)) return;
+        if ((AttachedDeviceObject) || (DeviceObject->ReferenceCount)) return;
 
         /* Check if we have a Security Descriptor */
         if (DeviceObject->SecurityDescriptor)
 
         /* Check if we have a Security Descriptor */
         if (DeviceObject->SecurityDescriptor)