[compiler-rt] [scudo] Separated committed and decommitted entries. (PR #100818)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 29 11:27:06 PDT 2024
================
@@ -475,71 +513,88 @@ template <typename Config> class MapAllocatorCache {
u32 FreeIndex = AvailableHead;
AvailableHead = Entries[AvailableHead].Next;
- if (EntriesCount == 0) {
- LRUTail = static_cast<u16>(FreeIndex);
- } else {
- // Check list order
- if (EntriesCount > 1)
- DCHECK_GE(Entries[LRUHead].Time, Entries[Entries[LRUHead].Next].Time);
- Entries[LRUHead].Prev = static_cast<u16>(FreeIndex);
- }
-
Entries[FreeIndex] = Entry;
- Entries[FreeIndex].Next = LRUHead;
- Entries[FreeIndex].Prev = CachedBlock::InvalidEntry;
- LRUHead = static_cast<u16>(FreeIndex);
+ pushFront(FreeIndex, ListType);
EntriesCount++;
+ if (Entries[EntryLists[ListType].Head].Next != CachedBlock::InvalidEntry) {
+ DCHECK_GE(Entries[EntryLists[ListType].Head].Time,
+ Entries[Entries[EntryLists[ListType].Head].Next].Time);
+ }
// Availability stack should not have available entries when all entries
// are in use
if (EntriesCount == Config::getEntriesArraySize())
DCHECK_EQ(AvailableHead, CachedBlock::InvalidEntry);
}
- void remove(uptr I) REQUIRES(Mutex) {
- DCHECK(Entries[I].isValid());
-
- Entries[I].invalidate();
-
- if (I == LRUHead)
- LRUHead = Entries[I].Next;
+ void unlink(uptr I, EntryListT ListType) REQUIRES(Mutex) {
----------------
ChiaHungDuan wrote:
Can we have some comment about the difference between `unlink` and `remove`?
https://github.com/llvm/llvm-project/pull/100818
More information about the llvm-commits
mailing list