[NTOS:MM]
authorThomas Faber <thomas.faber@reactos.org>
Tue, 1 Oct 2013 17:51:38 +0000 (17:51 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Tue, 1 Oct 2013 17:51:38 +0000 (17:51 +0000)
- Print some debug information on assertion failures in MiDecrementReferenceCount.
CORE-6690

svn path=/trunk/; revision=60502

reactos/ntoskrnl/mm/ARM3/pfnlist.c

index 45d8a6a..cc8dd68 100644 (file)
@@ -1308,9 +1308,18 @@ MiDecrementReferenceCount(IN PMMPFN Pfn1,
     ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
 
     /* Sanity checks on the page */
-    ASSERT(PageFrameIndex < MmHighestPhysicalPage);
-    ASSERT(Pfn1 == MI_PFN_ELEMENT(PageFrameIndex));
-    ASSERT(Pfn1->u3.e2.ReferenceCount != 0);
+    if (PageFrameIndex >= MmHighestPhysicalPage ||
+        Pfn1 != MI_PFN_ELEMENT(PageFrameIndex) ||
+        Pfn1->u3.e2.ReferenceCount == 0 ||
+        Pfn1->u3.e2.ReferenceCount >= 2500)
+    {
+        DPRINT1("PageFrameIndex=0x%lx, MmHighestPhysicalPage=0x%lx\n", PageFrameIndex, MmHighestPhysicalPage);
+        DPRINT1("Pfn1=%p, Element=%p, RefCount=%u\n", Pfn1, MI_PFN_ELEMENT(PageFrameIndex), Pfn1->u3.e2.ReferenceCount);
+        ASSERT(PageFrameIndex < MmHighestPhysicalPage);
+        ASSERT(Pfn1 == MI_PFN_ELEMENT(PageFrameIndex));
+        ASSERT(Pfn1->u3.e2.ReferenceCount != 0);
+        ASSERT(Pfn1->u3.e2.ReferenceCount < 2500);
+    }
 
     /* Dereference the page, bail out if it's still alive */
     InterlockedDecrement16((PSHORT)&Pfn1->u3.e2.ReferenceCount);