diff options
Diffstat (limited to 'compiler-rt/lib/memprof/memprof_mibmap.cpp')
| -rw-r--r-- | compiler-rt/lib/memprof/memprof_mibmap.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/compiler-rt/lib/memprof/memprof_mibmap.cpp b/compiler-rt/lib/memprof/memprof_mibmap.cpp index 32f0796c8f24..a49ed8bf4fd6 100644 --- a/compiler-rt/lib/memprof/memprof_mibmap.cpp +++ b/compiler-rt/lib/memprof/memprof_mibmap.cpp @@ -30,7 +30,18 @@ void InsertOrMerge(const uptr Id, const MemInfoBlock &Block, MIBMapTy &Map) { } else { LockedMemInfoBlock *lmib = *h; SpinMutexLock lock(&lmib->mutex); + uintptr_t ShorterHistogram; + if (Block.AccessHistogramSize > lmib->mib.AccessHistogramSize) + ShorterHistogram = lmib->mib.AccessHistogram; + else + ShorterHistogram = Block.AccessHistogram; + lmib->mib.Merge(Block); + // The larger histogram is kept and the shorter histogram is discarded after + // adding the counters to the larger historam. Free only the shorter + // Histogram + if (Block.AccessHistogramSize > 0 || lmib->mib.AccessHistogramSize > 0) + InternalFree((void *)ShorterHistogram); } } |
