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; |
} |