From c02ae1b606ce7eded0e38d44a77ea4bd30fc1ee8 Mon Sep 17 00:00:00 2001 From: Gunnar Dalsnes Date: Sun, 6 Mar 2005 13:48:04 +0000 Subject: [PATCH] IoCancelIrp didnt remove the cancel routine from the irp after canceling it svn path=/trunk/; revision=13853 --- reactos/ntoskrnl/io/cancel.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/io/cancel.c b/reactos/ntoskrnl/io/cancel.c index 1ce6919fb34..252fbd2955c 100644 --- a/reactos/ntoskrnl/io/cancel.c +++ b/reactos/ntoskrnl/io/cancel.c @@ -204,18 +204,23 @@ BOOLEAN STDCALL 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); }