diff --git a/compiler-rt/lib/scudo/standalone/secondary.h b/compiler-rt/lib/scudo/standalone/secondary.h --- a/compiler-rt/lib/scudo/standalone/secondary.h +++ b/compiler-rt/lib/scudo/standalone/secondary.h @@ -79,6 +79,10 @@ uptr BlockBegin = 0; MemMapT MemMap = {}; u64 Time = 0; + + bool isValid() { return CommitBase != 0; } + + void invalidateEntry() { CommitBase = 0; } }; } // namespace @@ -150,7 +154,7 @@ EntriesCount, atomic_load_relaxed(&MaxEntriesCount), atomic_load_relaxed(&MaxEntrySize)); for (CachedBlock Entry : Entries) { - if (!Entry.CommitBase) + if (!Entry.isValid()) continue; Str->append("StartBlockAddress: 0x%zx, EndBlockAddress: 0x%zx, " "BlockSize: %zu\n", @@ -217,7 +221,7 @@ if (CacheConfig::QuarantineSize && useMemoryTagging(Options)) { QuarantinePos = (QuarantinePos + 1) % Max(CacheConfig::QuarantineSize, 1u); - if (!Quarantine[QuarantinePos].CommitBase) { + if (!Quarantine[QuarantinePos].isValid()) { Quarantine[QuarantinePos] = Entry; return; } @@ -232,7 +236,7 @@ EmptyCache = true; } else { for (u32 I = 0; I < MaxCount; I++) { - if (Entries[I].CommitBase) + if (Entries[I].isValid()) continue; if (I != 0) Entries[I] = Entries[0]; @@ -261,13 +265,13 @@ if (EntriesCount == 0) return false; for (u32 I = 0; I < MaxCount; I++) { - if (!Entries[I].CommitBase) + if (!Entries[I].isValid()) continue; if (Size > Entries[I].CommitSize) continue; Found = true; Entry = Entries[I]; - Entries[I].CommitBase = 0; + Entries[I].invalidateEntry(); EntriesCount--; break; } @@ -308,15 +312,15 @@ void disableMemoryTagging() EXCLUDES(Mutex) { ScopedLock L(Mutex); for (u32 I = 0; I != CacheConfig::QuarantineSize; ++I) { - if (Quarantine[I].CommitBase) { + if (Quarantine[I].isValid()) { MemMapT &MemMap = Quarantine[I].MemMap; MemMap.unmap(MemMap.getBase(), MemMap.getCapacity()); - Quarantine[I].CommitBase = 0; + Quarantine[I].invalidateEntry(); } } const u32 MaxCount = atomic_load_relaxed(&MaxEntriesCount); for (u32 I = 0; I < MaxCount; I++) { - if (Entries[I].CommitBase) { + if (Entries[I].isValid()) { Entries[I].MemMap.setMemoryPermission(Entries[I].CommitBase, Entries[I].CommitSize, 0); } @@ -337,10 +341,10 @@ { ScopedLock L(Mutex); for (uptr I = 0; I < CacheConfig::EntriesArraySize; I++) { - if (!Entries[I].CommitBase) + if (!Entries[I].isValid()) continue; MapInfo[N] = Entries[I].MemMap; - Entries[I].CommitBase = 0; + Entries[I].invalidateEntry(); N++; } EntriesCount = 0; @@ -353,7 +357,7 @@ } void releaseIfOlderThan(CachedBlock &Entry, u64 Time) REQUIRES(Mutex) { - if (!Entry.CommitBase || !Entry.Time) + if (!Entry.isValid() || !Entry.Time) return; if (Entry.Time > Time) { if (OldestTime == 0 || Entry.Time < OldestTime) @@ -437,7 +441,7 @@ } } - inline void setHeader(Options Options, CachedBlock &Entry, + inline void setHeader(Options Options, CachedBlock Entry, LargeBlock::Header *H, bool &Zeroed) { Zeroed = Entry.Time == 0; if (useMemoryTagging(Options)) {