| Index: third_party/tcmalloc/chromium/src/heap-profiler.cc
|
| ===================================================================
|
| --- third_party/tcmalloc/chromium/src/heap-profiler.cc (revision 87277)
|
| +++ third_party/tcmalloc/chromium/src/heap-profiler.cc (working copy)
|
| @@ -33,7 +33,7 @@
|
| // TODO: Log large allocations
|
|
|
| #include <config.h>
|
| -
|
| +#include <stddef.h>
|
| #include <stdio.h>
|
| #include <stdlib.h>
|
| #ifdef HAVE_UNISTD_H
|
| @@ -182,7 +182,6 @@
|
| static void AddRemoveMMapDataLocked(AddOrRemove mode) {
|
| RAW_DCHECK(heap_lock.IsHeld(), "");
|
| if (!FLAGS_mmap_profile || !is_on) return;
|
| - if (!FLAGS_mmap_log) MemoryRegionMap::CheckMallocHooks();
|
| // MemoryRegionMap maintained all the data we need for all
|
| // mmap-like allocations, so we just use it here:
|
| MemoryRegionMap::LockHolder l;
|
| @@ -210,6 +209,7 @@
|
| int bytes_written = 0;
|
| if (is_on) {
|
| HeapProfileTable::Stats const stats = heap_profile->total();
|
| + (void)stats; // avoid an unused-variable warning in non-debug mode.
|
| AddRemoveMMapDataLocked(ADD);
|
| bytes_written = heap_profile->FillOrderedProfile(buf, buflen - 1);
|
| // FillOrderedProfile should not reduce the set of active mmap-ed regions,
|
| @@ -244,15 +244,6 @@
|
|
|
| if (filename_prefix == NULL) return; // we do not yet need dumping
|
|
|
| - if (FLAGS_only_mmap_profile == false) {
|
| - if (MallocHook::GetNewHook() != NewHook ||
|
| - MallocHook::GetDeleteHook() != DeleteHook) {
|
| - RAW_LOG(FATAL, "Had our new/delete MallocHook-s replaced. "
|
| - "Are you using another MallocHook client? "
|
| - "Do not use --heap_profile=... to avoid this conflict.");
|
| - }
|
| - }
|
| -
|
| dumping = true;
|
|
|
| // Make file name
|
| @@ -371,12 +362,6 @@
|
| }
|
| #endif
|
|
|
| -// Saved MemoryRegionMap's hooks to daisy-chain calls to.
|
| -MallocHook::MmapHook saved_mmap_hook = NULL;
|
| -MallocHook::MremapHook saved_mremap_hook = NULL;
|
| -MallocHook::MunmapHook saved_munmap_hook = NULL;
|
| -MallocHook::SbrkHook saved_sbrk_hook = NULL;
|
| -
|
| static void MmapHook(const void* result, const void* start, size_t size,
|
| int prot, int flags, int fd, off_t offset) {
|
| if (FLAGS_mmap_log) { // log it
|
| @@ -392,11 +377,6 @@
|
| DumpStackTrace(1, RawInfoStackDumper, NULL);
|
| #endif
|
| }
|
| - if (saved_mmap_hook) {
|
| - // Call MemoryRegionMap's hook: it will record needed info about the mmap
|
| - // for us w/o deadlocks:
|
| - (*saved_mmap_hook)(result, start, size, prot, flags, fd, offset);
|
| - }
|
| }
|
|
|
| static void MremapHook(const void* result, const void* old_addr,
|
| @@ -416,9 +396,6 @@
|
| DumpStackTrace(1, RawInfoStackDumper, NULL);
|
| #endif
|
| }
|
| - if (saved_mremap_hook) { // call MemoryRegionMap's hook
|
| - (*saved_mremap_hook)(result, old_addr, old_size, new_size, flags, new_addr);
|
| - }
|
| }
|
|
|
| static void MunmapHook(const void* ptr, size_t size) {
|
| @@ -432,9 +409,6 @@
|
| DumpStackTrace(1, RawInfoStackDumper, NULL);
|
| #endif
|
| }
|
| - if (saved_munmap_hook) { // call MemoryRegionMap's hook
|
| - (*saved_munmap_hook)(ptr, size);
|
| - }
|
| }
|
|
|
| static void SbrkHook(const void* result, ptrdiff_t increment) {
|
| @@ -445,9 +419,6 @@
|
| DumpStackTrace(1, RawInfoStackDumper, NULL);
|
| #endif
|
| }
|
| - if (saved_sbrk_hook) { // call MemoryRegionMap's hook
|
| - (*saved_sbrk_hook)(result, increment);
|
| - }
|
| }
|
|
|
| //----------------------------------------------------------------------
|
| @@ -478,12 +449,11 @@
|
| }
|
|
|
| if (FLAGS_mmap_log) {
|
| - // Install our hooks to do the logging
|
| - // and maybe save MemoryRegionMap's hooks to call:
|
| - saved_mmap_hook = MallocHook::SetMmapHook(MmapHook);
|
| - saved_mremap_hook = MallocHook::SetMremapHook(MremapHook);
|
| - saved_munmap_hook = MallocHook::SetMunmapHook(MunmapHook);
|
| - saved_sbrk_hook = MallocHook::SetSbrkHook(SbrkHook);
|
| + // Install our hooks to do the logging:
|
| + RAW_CHECK(MallocHook::AddMmapHook(&MmapHook), "");
|
| + RAW_CHECK(MallocHook::AddMremapHook(&MremapHook), "");
|
| + RAW_CHECK(MallocHook::AddMunmapHook(&MunmapHook), "");
|
| + RAW_CHECK(MallocHook::AddSbrkHook(&SbrkHook), "");
|
| }
|
|
|
| heap_profiler_memory =
|
| @@ -506,14 +476,9 @@
|
| // sequence of profiles.
|
|
|
| if (FLAGS_only_mmap_profile == false) {
|
| - // Now set the hooks that capture new/delete and malloc/free
|
| - // and check that these are the only hooks:
|
| - if (MallocHook::SetNewHook(NewHook) != NULL ||
|
| - MallocHook::SetDeleteHook(DeleteHook) != NULL) {
|
| - RAW_LOG(FATAL, "Had other new/delete MallocHook-s set. "
|
| - "Are you using the heap leak checker? "
|
| - "Use --heap_check=\"\" to avoid this conflict.");
|
| - }
|
| + // Now set the hooks that capture new/delete and malloc/free.
|
| + RAW_CHECK(MallocHook::AddNewHook(&NewHook), "");
|
| + RAW_CHECK(MallocHook::AddDeleteHook(&DeleteHook), "");
|
| }
|
|
|
| // Copy filename prefix
|
| @@ -535,24 +500,16 @@
|
| if (!is_on) return;
|
|
|
| if (FLAGS_only_mmap_profile == false) {
|
| - // Unset our new/delete hooks, checking they were the ones set:
|
| - if (MallocHook::SetNewHook(NULL) != NewHook ||
|
| - MallocHook::SetDeleteHook(NULL) != DeleteHook) {
|
| - RAW_LOG(FATAL, "Had our new/delete MallocHook-s replaced. "
|
| - "Are you using another MallocHook client? "
|
| - "Do not use --heap_profile=... to avoid this conflict.");
|
| - }
|
| + // Unset our new/delete hooks, checking they were set:
|
| + RAW_CHECK(MallocHook::RemoveNewHook(&NewHook), "");
|
| + RAW_CHECK(MallocHook::RemoveDeleteHook(&DeleteHook), "");
|
| }
|
| if (FLAGS_mmap_log) {
|
| - // Restore mmap/sbrk hooks, checking that our hooks were the ones set:
|
| - if (MallocHook::SetMmapHook(saved_mmap_hook) != MmapHook ||
|
| - MallocHook::SetMremapHook(saved_mremap_hook) != MremapHook ||
|
| - MallocHook::SetMunmapHook(saved_munmap_hook) != MunmapHook ||
|
| - MallocHook::SetSbrkHook(saved_sbrk_hook) != SbrkHook) {
|
| - RAW_LOG(FATAL, "Had our mmap/mremap/munmap/sbrk MallocHook-s replaced. "
|
| - "Are you using another MallocHook client? "
|
| - "Do not use --heap_profile=... to avoid this conflict.");
|
| - }
|
| + // Restore mmap/sbrk hooks, checking that our hooks were set:
|
| + RAW_CHECK(MallocHook::RemoveMmapHook(&MmapHook), "");
|
| + RAW_CHECK(MallocHook::RemoveMremapHook(&MremapHook), "");
|
| + RAW_CHECK(MallocHook::RemoveSbrkHook(&SbrkHook), "");
|
| + RAW_CHECK(MallocHook::RemoveMunmapHook(&MunmapHook), "");
|
| }
|
|
|
| // free profile
|
|
|