mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
Lock always the address space if we changing the virtual mapping.
This is necessary because we can create or remove a page table. svn path=/trunk/; revision=18848
This commit is contained in:
parent
d74ef35a60
commit
470db6b8eb
1 changed files with 5 additions and 1 deletions
|
@ -171,6 +171,7 @@ MmPageOutVirtualMemory(PMADDRESS_SPACE AddressSpace,
|
|||
*/
|
||||
if (!WasDirty)
|
||||
{
|
||||
MmLockAddressSpace(AddressSpace);
|
||||
MmDeleteVirtualMapping(AddressSpace->Process, Address, FALSE, NULL, NULL);
|
||||
MmDeleteAllRmaps(Page, NULL, NULL);
|
||||
if ((SwapEntry = MmGetSavedSwapEntryPage(Page)) != 0)
|
||||
|
@ -178,6 +179,7 @@ MmPageOutVirtualMemory(PMADDRESS_SPACE AddressSpace,
|
|||
MmCreatePageFileMapping(AddressSpace->Process, Address, SwapEntry);
|
||||
MmSetSavedSwapEntryPage(Page, 0);
|
||||
}
|
||||
MmUnlockAddressSpace(AddressSpace);
|
||||
MmReleasePageMemoryConsumer(MC_USER, Page);
|
||||
PageOp->Status = STATUS_SUCCESS;
|
||||
KeSetEvent(&PageOp->CompletionEvent, IO_NO_INCREMENT, FALSE);
|
||||
|
@ -222,8 +224,10 @@ MmPageOutVirtualMemory(PMADDRESS_SPACE AddressSpace,
|
|||
* Otherwise we have succeeded, free the page
|
||||
*/
|
||||
DPRINT("MM: Swapped out virtual memory page 0x%.8X!\n", Page << PAGE_SHIFT);
|
||||
MmLockAddressSpace(AddressSpace);
|
||||
MmDeleteVirtualMapping(AddressSpace->Process, Address, FALSE, NULL, NULL);
|
||||
MmCreatePageFileMapping(AddressSpace->Process, Address, SwapEntry);
|
||||
MmUnlockAddressSpace(AddressSpace);
|
||||
MmDeleteAllRmaps(Page, NULL, NULL);
|
||||
MmSetSavedSwapEntryPage(Page, 0);
|
||||
MmReleasePageMemoryConsumer(MC_USER, Page);
|
||||
|
@ -997,7 +1001,7 @@ MmQueryAnonMem(PMEMORY_AREA MemoryArea,
|
|||
Info->BaseAddress = RegionBase;
|
||||
Info->AllocationBase = MemoryArea->StartingAddress;
|
||||
Info->AllocationProtect = MemoryArea->Attributes;
|
||||
Info->RegionSize = (char*)RegionBase + Region->Length - (char*)Info->BaseAddress;
|
||||
Info->RegionSize = Region->Length;
|
||||
Info->State = Region->Type;
|
||||
Info->Protect = Region->Protect;
|
||||
Info->Type = MEM_PRIVATE;
|
||||
|
|
Loading…
Reference in a new issue