From 4be8d4740d8490e6f683b39eb29eb42368c57e33 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 19 Dec 2011 02:56:58 +0000 Subject: [PATCH] [NTOSKRNL] - Only unmap pages if they were mapped - Make sure the page reference counts are sane when freeing the cache memory area svn path=/trunk/; revision=54690 --- reactos/ntoskrnl/cc/copy.c | 3 +++ reactos/ntoskrnl/cc/view.c | 1 + 2 files changed, 4 insertions(+) diff --git a/reactos/ntoskrnl/cc/copy.c b/reactos/ntoskrnl/cc/copy.c index 7162b6ab74e..c6ee11f2f23 100644 --- a/reactos/ntoskrnl/cc/copy.c +++ b/reactos/ntoskrnl/cc/copy.c @@ -645,7 +645,10 @@ CcZeroData (IN PFILE_OBJECT FileObject, KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); Status = Iosb.Status; } + if (Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) + { MmUnmapLockedPages(Mdl->MappedSystemVa, Mdl); + } if (!NT_SUCCESS(Status)) { return(FALSE); diff --git a/reactos/ntoskrnl/cc/view.c b/reactos/ntoskrnl/cc/view.c index 8819a83b3b0..bd52296509c 100644 --- a/reactos/ntoskrnl/cc/view.c +++ b/reactos/ntoskrnl/cc/view.c @@ -899,6 +899,7 @@ CcFreeCachePage(PVOID Context, MEMORY_AREA* MemoryArea, PVOID Address, ASSERT(SwapEntry == 0); if (Page != 0) { + ASSERT(MmGetReferenceCountPage(Page) == 1); MmReleasePageMemoryConsumer(MC_CACHE, Page); } }