Author: arty
Date: Tue Jun 12 22:31:54 2012
New Revision: 56727

URL: http://svn.reactos.org/svn/reactos?rev=56727&view=rev
Log:
[NTOSKRNL]
When a VAD is truncated using VirtualFree, truncate the corresponding MemoryArea
so new allocations will match in both spaces.

Modified:
    trunk/reactos/ntoskrnl/mm/ARM3/virtual.c

Modified: trunk/reactos/ntoskrnl/mm/ARM3/virtual.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/virtual.c?rev=56727&r1=56726&r2=56727&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/virtual.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/virtual.c [iso-8859-1] Tue Jun 12 22:31:54 
2012
@@ -4214,6 +4214,8 @@
                 //
                 if ((EndingAddress >> PAGE_SHIFT) == Vad->EndingVpn)
                 {
+                    PMEMORY_AREA MemoryArea;
+
                     //
                     // This is pretty easy and similar to case A. We compute 
the
                     // amount of pages to decommit, update the VAD's commit 
charge
@@ -4226,7 +4228,12 @@
                                                                 Vad,
                                                                 Process);
                     Vad->u.VadFlags.CommitCharge -= CommitReduction;
+                    // For ReactOS: shrink the corresponding memory area
+                    MemoryArea = MmLocateMemoryAreaByAddress(AddressSpace, 
(PVOID)StartingAddress);
+                    ASSERT(Vad->StartingVpn << PAGE_SHIFT == 
(ULONG_PTR)MemoryArea->StartingAddress);
+                    ASSERT((Vad->EndingVpn + 1) << PAGE_SHIFT == 
(ULONG_PTR)MemoryArea->EndingAddress);
                     Vad->EndingVpn = ((ULONG_PTR)StartingAddress - 1) >> 
PAGE_SHIFT;
+                    MemoryArea->EndingAddress = (PVOID)(((Vad->EndingVpn + 1) 
<< PAGE_SHIFT) - 1);
                 }
                 else
                 {


Reply via email to