diff options
Diffstat (limited to 'compiler-rt/lib/scudo/standalone/primary64.h')
| -rw-r--r-- | compiler-rt/lib/scudo/standalone/primary64.h | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/compiler-rt/lib/scudo/standalone/primary64.h b/compiler-rt/lib/scudo/standalone/primary64.h index 035182b33ef..0149edc899d 100644 --- a/compiler-rt/lib/scudo/standalone/primary64.h +++ b/compiler-rt/lib/scudo/standalone/primary64.h @@ -81,7 +81,7 @@ public: // TODO(kostyak): make the lower limit a runtime option Region->CanRelease = (ReleaseToOsInterval > 0) && (I != SizeClassMap::BatchClassId) && - (getSizeByClassId(I) >= (PageSize / 32)); + (getSizeByClassId(I) >= (PageSize / 16)); Region->RandState = getRandomU32(&Seed); } ReleaseToOsIntervalMs = ReleaseToOsInterval; @@ -102,9 +102,9 @@ public: RegionInfo *Region = getRegionInfo(ClassId); ScopedLock L(Region->Mutex); TransferBatch *B = Region->FreeList.front(); - if (B) + if (B) { Region->FreeList.pop_front(); - else { + } else { B = populateFreeList(C, ClassId, Region); if (UNLIKELY(!B)) return nullptr; @@ -131,7 +131,7 @@ public: void enable() { for (sptr I = static_cast<sptr>(NumClasses) - 1; I >= 0; I--) - getRegionInfo(I)->Mutex.unlock(); + getRegionInfo(static_cast<uptr>(I))->Mutex.unlock(); } template <typename F> void iterateOverBlocks(F Callback) const { @@ -181,7 +181,7 @@ private: static const uptr PrimarySize = RegionSize * NumClasses; // Call map for user memory with at least this size. - static const uptr MapSizeIncrement = 1UL << 16; + static const uptr MapSizeIncrement = 1UL << 17; struct RegionStats { uptr PoppedBlocks; @@ -272,7 +272,7 @@ private: } return nullptr; } - if (MappedUser == 0) + if (UNLIKELY(MappedUser == 0)) Region->Data = Data; if (UNLIKELY(!map(reinterpret_cast<void *>(RegionBeg + MappedUser), UserMapSize, "scudo:primary", @@ -307,7 +307,7 @@ private: return nullptr; } DCHECK(B); - CHECK_GT(B->getCount(), 0); + DCHECK_GT(B->getCount(), 0); Region->AllocatedUser += AllocatedUser; Region->Exhausted = false; @@ -355,7 +355,8 @@ private: const s32 IntervalMs = ReleaseToOsIntervalMs; if (IntervalMs < 0) return; - if (Region->ReleaseInfo.LastReleaseAtNs + IntervalMs * 1000000ULL > + if (Region->ReleaseInfo.LastReleaseAtNs + + static_cast<uptr>(IntervalMs) * 1000000ULL > getMonotonicTime()) { return; // Memory was returned recently. } |

