in cachelib/allocator/memory/MemoryAllocator.h [569:589]
void forEachAllocation(AllocTraversalFn&& callback) {
for (unsigned int idx = 0; idx < slabAllocator_.getNumUsableSlabs();
++idx) {
Slab* slab = slabAllocator_.getSlabForIdx(idx);
const auto slabHdr = slabAllocator_.getSlabHeader(slab);
if (!slabHdr) {
continue;
}
auto classId = slabHdr->classId;
auto poolId = slabHdr->poolId;
if (poolId == Slab::kInvalidPoolId || classId == Slab::kInvalidClassId ||
slabHdr->isAdvised() || slabHdr->isMarkedForRelease()) {
continue;
}
auto& pool = memoryPoolManager_.getPoolById(poolId);
if (!pool.forEachAllocation(
classId, slab, std::forward<AllocTraversalFn>(callback))) {
return;
}
}
}