| Index: base/trace_event/heap_profiler_allocation_context_tracker.cc
|
| diff --git a/base/trace_event/heap_profiler_allocation_context_tracker.cc b/base/trace_event/heap_profiler_allocation_context_tracker.cc
|
| index fac4a8a7b437b4a8c6792631f252ad8a3e78c8e5..67e2b9998adb9b16763abd5a90579a6af0594bee 100644
|
| --- a/base/trace_event/heap_profiler_allocation_context_tracker.cc
|
| +++ b/base/trace_event/heap_profiler_allocation_context_tracker.cc
|
| @@ -165,6 +165,9 @@ AllocationContext AllocationContextTracker::GetContextSnapshot() {
|
| return ctx;
|
| }
|
|
|
| + // Ignore reentrancy during the call.
|
| + ignore_scope_depth_++;
|
| +
|
| CaptureMode mode = static_cast<CaptureMode>(
|
| subtle::NoBarrier_Load(&capture_mode_));
|
|
|
| @@ -172,13 +175,9 @@ AllocationContext AllocationContextTracker::GetContextSnapshot() {
|
| auto backtrace_end = std::end(ctx.backtrace.frames);
|
|
|
| if (!thread_name_) {
|
| - // Ignore the string allocation made by GetAndLeakThreadName to avoid
|
| - // reentrancy.
|
| - ignore_scope_depth_++;
|
| thread_name_ = GetAndLeakThreadName();
|
| ANNOTATE_LEAKING_OBJECT_PTR(thread_name_);
|
| DCHECK(thread_name_);
|
| - ignore_scope_depth_--;
|
| }
|
|
|
| // Add the thread name as the first entry in pseudo stack.
|
| @@ -214,7 +213,8 @@ AllocationContext AllocationContextTracker::GetContextSnapshot() {
|
| size_t frame_count = debug::TraceStackFramePointers(
|
| frames,
|
| arraysize(frames),
|
| - 1 /* exclude this function from the trace */ );
|
| + 1 /* exclude this function from the trace */,
|
| + &stack_info_);
|
| #else
|
| size_t frame_count = 0;
|
| NOTREACHED();
|
| @@ -239,6 +239,7 @@ AllocationContext AllocationContextTracker::GetContextSnapshot() {
|
| // (component name) in the heap profiler and not piggy back on the type name.
|
| ctx.type_name = task_contexts_.empty() ? nullptr : task_contexts_.back();
|
|
|
| + ignore_scope_depth_--;
|
| return ctx;
|
| }
|
|
|
|
|