[scudo] SizeClassAllocator64: dispatch all the classes in init()
authorFabio D'Urso <fdurso@google.com>
Fri, 30 Jun 2023 14:35:09 +0000 (16:35 +0200)
committerFabio D'Urso <fdurso@google.com>
Fri, 30 Jun 2023 15:13:41 +0000 (17:13 +0200)
This will make it easier to verify in a future patch that the ReservedMemory object has been fully dispatched.

Reviewed By: Chia-hungDuan

Differential Revision: https://reviews.llvm.org/D153019

compiler-rt/lib/scudo/standalone/primary64.h

index ab75f19..e6cd120 100644 (file)
@@ -132,6 +132,10 @@ public:
       else
         Region->TryReleaseThreshold = PageSize;
       Region->ReleaseInfo.LastReleaseAtNs = Time;
+
+      Region->MemMapInfo.MemMap = ReservedMemory.dispatch(
+          PrimaryBase + (I << Config::Primary::RegionSizeLog), RegionSize);
+      CHECK(Region->MemMapInfo.MemMap.isAllocated());
     }
     shuffle(RegionInfoArray, NumClasses, &Seed);
 
@@ -822,12 +826,6 @@ private:
         Region->Exhausted = true;
         return nullptr;
       }
-      // TODO: Consider allocating MemMap in init().
-      if (!Region->MemMapInfo.MemMap.isAllocated()) {
-        Region->MemMapInfo.MemMap = ReservedMemory.dispatch(
-            getRegionBaseByClassId(ClassId), RegionSize);
-      }
-      DCHECK(Region->MemMapInfo.MemMap.isAllocated());
 
       if (UNLIKELY(!Region->MemMapInfo.MemMap.remap(
               RegionBeg + MappedUser, MapSize, "scudo:primary",