Fixed the unlocking of pages from a mdl. Modified: trunk/reactos/ntoskrnl/io/irp.c _____
Modified: trunk/reactos/ntoskrnl/io/irp.c --- trunk/reactos/ntoskrnl/io/irp.c 2005-05-08 16:00:59 UTC (rev 15130) +++ trunk/reactos/ntoskrnl/io/irp.c 2005-05-08 16:02:38 UTC (rev 15131) @@ -61,7 +61,7 @@
{ PFILE_OBJECT FileObject; PIRP Irp; - PMDL Mdl, NextMdl; + PMDL Mdl; PKEVENT UserEvent; BOOLEAN SyncIrp;
@@ -101,17 +101,12 @@ Irp->Flags &= ~(IRP_BUFFERED_IO | IRP_DEALLOCATE_BUFFER);
/* Check if there's an MDL */ - if ((Mdl = Irp->MdlAddress)) + while ((Mdl = Irp->MdlAddress)) { /* Clear all of them */ - do - { - NextMdl = Mdl->Next; - IoFreeMdl(Mdl); - Mdl = NextMdl; - } while (Mdl); + Irp->MdlAddress = Mdl->Next; + IoFreeMdl(Mdl); } - Irp->MdlAddress = NULL;
/* Remove the IRP from the list of Thread Pending IRPs */ RemoveEntryList(&Irp->ThreadListEntry); @@ -1122,11 +1117,12 @@ }
/* Unlock MDL Pages, page 167. */ - while ((Mdl = Irp->MdlAddress)) + Mdl = Irp->MdlAddress; + while (Mdl) { DPRINT("Unlocking MDL: %x\n", Mdl); - Irp->MdlAddress = Mdl->Next; MmUnlockPages(Mdl); + Mdl = Mdl->Next; }
/* Check if we should exit because of a Deferred I/O (page 168) */