Author: arty
Date: Wed Jan  6 09:48:56 2010
New Revision: 44973

URL: http://svn.reactos.org/svn/reactos?rev=44973&view=rev
Log:
Fix some wrong unlocking.
Remove erroneous clean when recalling a page.

Modified:
    branches/arty-newcc/ntoskrnl/mm/section/fault.c

Modified: branches/arty-newcc/ntoskrnl/mm/section/fault.c
URL: 
http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/mm/section/fault.c?rev=44973&r1=44972&r2=44973&view=diff
==============================================================================
--- branches/arty-newcc/ntoskrnl/mm/section/fault.c [iso-8859-1] (original)
+++ branches/arty-newcc/ntoskrnl/mm/section/fault.c [iso-8859-1] Wed Jan  6 
09:48:56 2010
@@ -46,7 +46,7 @@
 /* INCLUDES *****************************************************************/
 
 #include <ntoskrnl.h>
-#define NDEBUG
+//#define NDEBUG
 #include <debug.h>
 
 extern KEVENT MmWaitPageEvent;
@@ -97,17 +97,8 @@
                                                  
&MemoryArea->Data.SectionData.RegionListHead,
                                                  Address, NULL);
 
-       if (Segment->Flags & MM_IMAGE_SEGMENT)
-       {
-               FileOffset.QuadPart = TotalOffset.QuadPart + 
Segment->Image.FileOffset;
-               DPRINT("SEG Flags %x File Offset %x\n", 
-                          Segment->Image.Characteristics, FileOffset.LowPart);
-       }
-       else
-       {
-               TotalOffset.QuadPart += 
MemoryArea->Data.SectionData.ViewOffset.QuadPart;
-               FileOffset = TotalOffset;
-       }
+       TotalOffset.QuadPart += 
MemoryArea->Data.SectionData.ViewOffset.QuadPart;
+       FileOffset = TotalOffset;
 
        Consumer = (Segment->Flags & MM_DATAFILE_SEGMENT) ? MC_CACHE : MC_USER;
 
@@ -183,6 +174,7 @@
                if (SwapEntry == MM_WAIT_ENTRY)
                {
                        DPRINT1("Wait for page entry in section\n");
+                       MmUnlockSectionSegment(Segment);
                        return STATUS_SUCCESS + 1;
                }
                else
@@ -203,6 +195,7 @@
                if (SwapEntry == MM_WAIT_ENTRY)
                {
                        DPRINT1("Wait for page entry in section\n");
+                       MmUnlockSectionSegment(Segment);
                        return STATUS_SUCCESS + 1;
                }
                else
@@ -353,7 +346,6 @@
                        DPRINT("Set in section @ %x\n", Offset.LowPart);
                        Status = MiSetPageEntrySectionSegment
                                (Segment, &Offset, MAKE_PFN_SSE(Page));
-                       KeSetEvent(&MmWaitPageEvent, IO_NO_INCREMENT, FALSE);
                }
 
                if (Required->State & 2)
@@ -366,8 +358,6 @@
                                MmInsertRmap(Page, Process, Address);
                                if (Locked) MmLockPage(Page);
                        }
-                       DPRINT("Set clean %x\n", Page);
-                       MmSetCleanAllRmaps(Page);
                }
 
                if (Required->State & 4)
@@ -378,6 +368,8 @@
                }
 
                MmUnlockSectionSegment(Segment);
+               DPRINT("XXX Set Event %x\n", Status);
+               KeSetEvent(&MmWaitPageEvent, IO_NO_INCREMENT, FALSE);
                DPRINT("Done: %x\n", Status);
                return Status;
        }


Reply via email to