Fix a race condition in input packet processing.
Modified: trunk/reactos/drivers/input/mouclass/mouclass.c

Modified: trunk/reactos/drivers/input/mouclass/mouclass.c
--- trunk/reactos/drivers/input/mouclass/mouclass.c	2005-08-07 11:47:45 UTC (rev 17159)
+++ trunk/reactos/drivers/input/mouclass/mouclass.c	2005-08-07 11:47:50 UTC (rev 17160)
@@ -6,9 +6,7 @@
 
  ** The class driver between win32k and the various mouse port drivers
 
- ** TODO: Change interface to win32k to a callback instead of ReadFile IO
-          Add support for multiple port devices
-
+ ** FIXME: Support IRP cancellation properly.
 */
 
 #include <ddk/ntddk.h>
@@ -26,7 +24,7 @@
    PMOUSE_INPUT_DATA MouseDataEnd, PULONG ConsumedCount)
 {
    PDEVICE_EXTENSION ClassDeviceExtension = ClassDeviceObject->DeviceExtension;
-   PIRP Irp;
+   PIRP Irp = NULL;
    KIRQL OldIrql;
    PIO_STACK_LOCATION Stack;
    ULONG InputCount = MouseDataEnd - MouseDataStart;
@@ -53,8 +51,6 @@
       Irp->IoStatus.Information = sizeof(MOUSE_INPUT_DATA);
       Stack->Parameters.Read.Length = sizeof(MOUSE_INPUT_DATA);
 
-      IoStartNextPacket(ClassDeviceObject, FALSE);
-      IoCompleteRequest(Irp, IO_MOUSE_INCREMENT);
       ClassDeviceExtension->ReadIsPending = FALSE;
 
       /* Skip the packet we just sent away */
@@ -97,6 +93,12 @@
       DPRINT("MouseClassCallBack() entered, InputCount = %d - DOING NOTHING\n", InputCount);
    }
 
+   if (Irp != NULL)
+   {
+      IoStartNextPacket(ClassDeviceObject, FALSE);
+      IoCompleteRequest(Irp, IO_MOUSE_INCREMENT);
+   }
+
    DPRINT("Leaving MouseClassCallBack\n");
    return TRUE;
 }