Don't push an already freed irp to the list (in IoFreeIrp).
Modified: trunk/reactos/ntoskrnl/io/irp.c
--- trunk/reactos/ntoskrnl/io/irp.c 2005-05-15 13:57:03 UTC (rev 15310) +++ trunk/reactos/ntoskrnl/io/irp.c 2005-05-15 13:59:57 UTC (rev 15311) @@ -1282,11 +1282,15 @@
/* All lists failed, use the pool */ List->L.FreeMisses++; ExFreePool(Irp);
+ Irp = NULL;
} } /* The free was within dhe Depth */
- InterlockedPushEntrySList(&List->L.ListHead, (PSINGLE_LIST_ENTRY)Irp);
+ if (Irp)
+ {
+ InterlockedPushEntrySList(&List->L.ListHead, (PSINGLE_LIST_ENTRY)Irp);
+ }
} DPRINT("Free done\n");