Used MmFreeVirtualMemory in MmDeleteTeb because MmFreeMemoryAreaByPtr doesn't free the region list entries.

svn path=/trunk/; revision=16930
This commit is contained in:
Hartmut Birr 2005-08-01 00:06:18 +00:00
parent 3a76f91710
commit 15a077c46a

View file

@ -103,49 +103,23 @@ MmDeleteKernelStack(PVOID Stack,
MmUnlockAddressSpace(MmGetKernelAddressSpace());
}
VOID
MiFreePebPage(PVOID Context,
MEMORY_AREA* MemoryArea,
PVOID Address,
PFN_TYPE Page,
SWAPENTRY SwapEntry,
BOOLEAN Dirty)
{
PEPROCESS Process = (PEPROCESS)Context;
if (Page != 0)
{
SWAPENTRY SavedSwapEntry;
SavedSwapEntry = MmGetSavedSwapEntryPage(Page);
if (SavedSwapEntry != 0)
{
MmFreeSwapPage(SavedSwapEntry);
MmSetSavedSwapEntryPage(Page, 0);
}
MmDeleteRmap(Page, Process, Address);
MmReleasePageMemoryConsumer(MC_USER, Page);
}
else if (SwapEntry != 0)
{
MmFreeSwapPage(SwapEntry);
}
}
VOID
STDCALL
MmDeleteTeb(PEPROCESS Process,
PTEB Teb)
{
PMADDRESS_SPACE ProcessAddressSpace = &Process->AddressSpace;
PMEMORY_AREA MemoryArea;
/* Lock the Address Space */
MmLockAddressSpace(ProcessAddressSpace);
/* Delete the Stack */
MmFreeMemoryAreaByPtr(ProcessAddressSpace,
Teb,
MiFreePebPage,
Process);
MemoryArea = MmLocateMemoryAreaByAddress(ProcessAddressSpace, (PVOID)Teb);
if (MemoryArea)
{
/* Delete the Teb */
MmFreeVirtualMemory(Process, MemoryArea);
}
/* Unlock the Address Space */
MmUnlockAddressSpace(ProcessAddressSpace);