[ros-diffs] [cwittich] 27429: Never call IoCompleteRequest while holding a spin lock. Attempting to complete an IRP while holding a spin lock can cause deadlocks.

cwittich at svn.reactos.org cwittich at svn.reactos.org
Fri Jul 6 19:14:25 CEST 2007


Author: cwittich
Date: Fri Jul  6 21:14:24 2007
New Revision: 27429

URL: http://svn.reactos.org/svn/reactos?rev=27429&view=rev
Log:
Never call IoCompleteRequest while holding a spin lock. Attempting to complete an IRP while holding a spin lock can cause deadlocks.

Modified:
    trunk/reactos/drivers/input/kbdclass/kbdclass.c
    trunk/reactos/drivers/input/mouclass/mouclass.c

Modified: trunk/reactos/drivers/input/kbdclass/kbdclass.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/input/kbdclass/kbdclass.c?rev=27429&r1=27428&r2=27429&view=diff
==============================================================================
--- trunk/reactos/drivers/input/kbdclass/kbdclass.c (original)
+++ trunk/reactos/drivers/input/kbdclass/kbdclass.c Fri Jul  6 21:14:24 2007
@@ -797,10 +797,10 @@
 
 		/* Go to next packet and complete this request */
 		Irp->IoStatus.Status = Status;
+		KeReleaseSpinLock(&DeviceExtension->SpinLock, oldIrql);
+
 		IoCompleteRequest(Irp, IO_KEYBOARD_INCREMENT);
-
 		IoStartNextPacket(DeviceObject, FALSE);
-		KeReleaseSpinLock(&DeviceExtension->SpinLock, oldIrql);
 	}
 	else
 	{

Modified: trunk/reactos/drivers/input/mouclass/mouclass.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/input/mouclass/mouclass.c?rev=27429&r1=27428&r2=27429&view=diff
==============================================================================
--- trunk/reactos/drivers/input/mouclass/mouclass.c (original)
+++ trunk/reactos/drivers/input/mouclass/mouclass.c Fri Jul  6 21:14:24 2007
@@ -773,10 +773,10 @@
 
 		/* Go to next packet and complete this request */
 		Irp->IoStatus.Status = Status;
+		KeReleaseSpinLock(&DeviceExtension->SpinLock, oldIrql);
+
 		IoCompleteRequest(Irp, IO_MOUSE_INCREMENT);
-
 		IoStartNextPacket(DeviceObject, FALSE);
-		KeReleaseSpinLock(&DeviceExtension->SpinLock, oldIrql);
 	}
 	else
 	{




More information about the Ros-diffs mailing list