IoCancelIrp didnt remove the cancel routine from the irp after canceling
it
Modified: trunk/reactos/ntoskrnl/io/cancel.c
_____
Modified: trunk/reactos/ntoskrnl/io/cancel.c
--- trunk/reactos/ntoskrnl/io/cancel.c 2005-03-06 13:41:18 UTC (rev
13852)
+++ trunk/reactos/ntoskrnl/io/cancel.c 2005-03-06 13:48:04 UTC (rev
13853)
@@ -204,18 +204,23 @@
IoCancelIrp(PIRP Irp)
{
KIRQL oldlvl;
+ PDRIVER_CANCEL CancelRoutine;
DPRINT("IoCancelIrp(Irp %x)\n",Irp);
IoAcquireCancelSpinLock(&oldlvl);
+
Irp->Cancel = TRUE;
- if (Irp->CancelRoutine == NULL)
+
+ CancelRoutine = IoSetCancelRoutine(Irp, NULL);
+ if (CancelRoutine == NULL)
{
IoReleaseCancelSpinLock(oldlvl);
return(FALSE);
}
+
Irp->CancelIrql = oldlvl;
- Irp->CancelRoutine(IoGetCurrentIrpStackLocation(Irp)->DeviceObject,
Irp);
+ CancelRoutine(IoGetCurrentIrpStackLocation(Irp)->DeviceObject, Irp);
return(TRUE);
}