From b9185cc4c4c581ff7186b9cd83cb431cd2184fb5 Mon Sep 17 00:00:00 2001 From: David Welch Date: Mon, 21 Jul 2003 21:41:21 +0000 Subject: [PATCH] - Fix for lengthy delays when freeing a memory area. Don't attach/detach another process when deleting each page table entry. svn path=/trunk/; revision=5211 --- reactos/ntoskrnl/mm/marea.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/mm/marea.c b/reactos/ntoskrnl/mm/marea.c index f9dd06d739d..27be0448fa2 100644 --- a/reactos/ntoskrnl/mm/marea.c +++ b/reactos/ntoskrnl/mm/marea.c @@ -367,6 +367,7 @@ MmFreeMemoryArea(PMADDRESS_SPACE AddressSpace, { MEMORY_AREA* MemoryArea; ULONG i; + PEPROCESS CurrentProcess = PsGetCurrentProcess(); DPRINT("MmFreeMemoryArea(AddressSpace %x, BaseAddress %x, Length %x," "FreePageContext %d)\n",AddressSpace,BaseAddress,Length, @@ -379,6 +380,11 @@ MmFreeMemoryArea(PMADDRESS_SPACE AddressSpace, KeBugCheck(0); return(STATUS_UNSUCCESSFUL); } + if (AddressSpace->Process != NULL && + AddressSpace->Process != CurrentProcess) + { + KeAttachProcess(AddressSpace->Process); + } for (i=0; i<(PAGE_ROUND_UP(MemoryArea->Length)/PAGE_SIZE); i++) { PHYSICAL_ADDRESS PhysAddr = (PHYSICAL_ADDRESS)0LL; @@ -406,7 +412,11 @@ MmFreeMemoryArea(PMADDRESS_SPACE AddressSpace, SwapEntry, Dirty); } } - + if (AddressSpace->Process != NULL && + AddressSpace->Process != CurrentProcess) + { + KeDetachProcess(); + } RemoveEntryList(&MemoryArea->Entry); ExFreePool(MemoryArea);