[ros-diffs] [arty] 44231: We don't use MaximumPairCount to determine where the memory came from.

arty at svn.reactos.org arty at svn.reactos.org
Fri Nov 20 06:22:33 CET 2009


Author: arty
Date: Fri Nov 20 06:22:32 2009
New Revision: 44231

URL: http://svn.reactos.org/svn/reactos?rev=44231&view=rev
Log:
We don't use MaximumPairCount to determine where the memory came from.

Modified:
    branches/arty-newcc/ntoskrnl/fsrtl/largemcb.c

Modified: branches/arty-newcc/ntoskrnl/fsrtl/largemcb.c
URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/fsrtl/largemcb.c?rev=44231&r1=44230&r2=44231&view=diff
==============================================================================
--- branches/arty-newcc/ntoskrnl/fsrtl/largemcb.c [iso-8859-1] (original)
+++ branches/arty-newcc/ntoskrnl/fsrtl/largemcb.c [iso-8859-1] Fri Nov 20 06:22:32 2009
@@ -266,19 +266,22 @@
     if (PoolType == PagedPool)
     {
         Mcb->Mapping = ExAllocateFromPagedLookasideList(&FsRtlFirstMappingLookasideList);
+		DPRINT("Get from lookaside list\n");
     }
     else
     {
         Mcb->Mapping = ExAllocatePoolWithTag(PoolType | POOL_RAISE_IF_ALLOCATION_FAILURE,
 											 sizeof(RTL_GENERIC_TABLE) + sizeof(LIST_ENTRY),
                                              'FSBC');
+		DPRINT("Allocate\n");
     }
 
+	DPRINT("Mcb->Mapping %x\n", Mcb->Mapping);
     Mcb->PoolType = PoolType;
     Mcb->MaximumPairCount = MAXIMUM_PAIR_COUNT;
 	RtlInitializeGenericTable
 		(Mcb->Mapping,
-		 (PRTL_GENERIC_COMPARE_ROUTINE)McbMappingCompare,
+		 McbMappingCompare,
 		 McbMappingAllocate,
 		 McbMappingFree,
 		 Mcb);
@@ -683,14 +686,17 @@
 {
 	PLARGE_MCB_MAPPING_ENTRY Element;
 
+	DPRINT("Reset MCB %x\n", Mcb);
 	while (RtlNumberGenericTableElements(Mcb->Mapping) &&
 		   (Element = (PLARGE_MCB_MAPPING_ENTRY)RtlGetElementGenericTable(Mcb->Mapping, 0)))
 	{
+		DPRINT("Deleting %x\n", Element);
 		RtlDeleteElementGenericTable(Mcb->Mapping, Element);
 	}
 
 	Mcb->PairCount = 0;
 	Mcb->MaximumPairCount = 0;
+	DPRINT("Done\n");
 }
 
 /*
@@ -860,8 +866,10 @@
 FsRtlTruncateBaseMcb(IN PBASE_MCB Mcb,
                      IN LONGLONG Vbn)
 {
+	DPRINT("FsRtlTruncateBaseMcb(%x,%x)\n", Mcb, (ULONG)Vbn);
 	if (!Vbn)
 	{
+		DPRINT("Resetting\n");
 		FsRtlResetBaseMcb(Mcb);
 	}
 	else
@@ -872,11 +880,13 @@
 		Truncate.SectorCount.QuadPart = (1ull<<62) - Truncate.RunStartVbn.QuadPart;
 		while ((Found = RtlLookupElementGenericTable(Mcb->Mapping, &Truncate)))
 		{
+			DPRINT("Deleting %x\n", Found);
 			RemoveEntryList(&Found->Sequence);
 			RtlDeleteElementGenericTable(Mcb->Mapping, Found);
 			Mcb->PairCount--;
 		}
 	}
+	DPRINT("Done\n");
 }
 
 /*
@@ -902,17 +912,23 @@
 NTAPI
 FsRtlUninitializeBaseMcb(IN PBASE_MCB Mcb)
 {
+	DPRINT("FsRtlUninitializeBaseMcb(%x)\n", Mcb);
 	FsRtlResetBaseMcb(Mcb);
 
-    if ((Mcb->PoolType == PagedPool) && (Mcb->MaximumPairCount == MAXIMUM_PAIR_COUNT))
+	DPRINT("Mcb->Mapping %x\n", Mcb->Mapping);
+    if (Mcb->PoolType == PagedPool)
     {
+		DPRINT("Deallocate to lookaside list\n");
         ExFreeToPagedLookasideList(&FsRtlFirstMappingLookasideList,
                                    Mcb->Mapping);
     }
     else
     {
+		DPRINT("Deallocate\n");
         ExFreePoolWithTag(Mcb->Mapping, 'FSBC');
     }
+	Mcb->Mapping = NULL;
+	DPRINT("Done\n");
 }
 
 /*
@@ -926,6 +942,7 @@
     {
         ExFreeToNPagedLookasideList(&FsRtlFastMutexLookasideList,
                                     Mcb->GuardedMutex);
+		Mcb->GuardedMutex = NULL;
         FsRtlUninitializeBaseMcb(&(Mcb->BaseMcb));
     }
 }




More information about the Ros-diffs mailing list