Author: cgutman Date: Thu Mar 8 03:02:28 2012 New Revision: 56089
URL: http://svn.reactos.org/svn/reactos?rev=56089&view=rev Log: [NTOSKRNL] - Release the IO database lock before unloading the device (and driver too) to prevent deadlocks
Modified: trunk/reactos/ntoskrnl/io/iomgr/volume.c
Modified: trunk/reactos/ntoskrnl/io/iomgr/volume.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/volume.c?... ============================================================================== --- trunk/reactos/ntoskrnl/io/iomgr/volume.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/io/iomgr/volume.c [iso-8859-1] Thu Mar 8 03:02:28 2012 @@ -50,6 +50,9 @@ return; }
+ /* Release lock */ + KeReleaseQueuedSpinLock(LockQueueIoDatabaseLock, OldIrql); + /* Here, DO is not referenced any longer, check if we have to unload it */ if (UnloadIfUnused || IoGetDevObjExtension(DeviceObject)->ExtensionFlags & (DOE_UNLOAD_PENDING | DOE_DELETE_PENDING | DOE_REMOVE_PENDING)) @@ -57,9 +60,6 @@ /* Unload the driver */ IopUnloadDevice(DeviceObject); } - - /* Release lock */ - KeReleaseQueuedSpinLock(LockQueueIoDatabaseLock, OldIrql); }
/*