diff --git a/reactos/ntoskrnl/mm/freelist.c b/reactos/ntoskrnl/mm/freelist.c index 9680ca54bc8..920f0151c31 100644 --- a/reactos/ntoskrnl/mm/freelist.c +++ b/reactos/ntoskrnl/mm/freelist.c @@ -479,7 +479,9 @@ MmInitializePageList(ULONG_PTR FirstPhysKernelAddress, MmPageArray[j].Flags.Type = MM_PHYSICAL_PAGE_USED; MmPageArray[j].Flags.Zero = 0; MmPageArray[j].Flags.Consumer = MC_NPPOOL; - MmPageArray[j].ReferenceCount = 1; + /* Reference count 2, because we're having ReferenceCount track + MapCount as well. */ + MmPageArray[j].ReferenceCount = 2; MmPageArray[j].MapCount = 1; InsertTailList(&UsedPageListHeads[MC_NPPOOL], &MmPageArray[j].ListEntry); @@ -519,7 +521,7 @@ MmInitializePageList(ULONG_PTR FirstPhysKernelAddress, MmPageArray[i].Flags.Type = MM_PHYSICAL_PAGE_USED; MmPageArray[i].Flags.Zero = 0; MmPageArray[i].Flags.Consumer = MC_NPPOOL; - MmPageArray[i].ReferenceCount = 1; + MmPageArray[i].ReferenceCount = 2; MmPageArray[i].MapCount = 1; InsertTailList(&UsedPageListHeads[MC_NPPOOL], &MmPageArray[i].ListEntry); @@ -588,6 +590,7 @@ MmMarkPageMapped(PFN_TYPE Pfn) KEBUGCHECK(0); } MmPageArray[Pfn].MapCount++; + MmPageArray[Pfn].ReferenceCount++; KeReleaseSpinLock(&PageListLock, oldIrql); } } @@ -612,6 +615,7 @@ MmMarkPageUnmapped(PFN_TYPE Pfn) KEBUGCHECK(0); } MmPageArray[Pfn].MapCount--; + MmPageArray[Pfn].ReferenceCount--; KeReleaseSpinLock(&PageListLock, oldIrql); } }