Issue metadata
Sign in to add a comment
|
--enable-heap-profiling may cause deadlock on MemoryDumpManager's lock |
||||||||||||||||||||||||
Issue descriptionWhen we use --enable-heap-profiling in pseudo-stack mode, it may cause deadlock on MemoryDumpManager's lock. Easily reproducible on Android. This bot is red https://build.chromium.org/p/chromium.android.fyi/builders/Memory%20Infra%20Tester because of that. The interesting and formated part os stack trace below: base::AutoLock::ctor() base/synchronization/lock.h:115 base::trace_event::MemoryDumpManager::RegisterDumpProviderInternal() base/trace_event/memory_dump_manager.cc:402 base::trace_event::MemoryDumpManager::RegisterDumpProvider() base/trace_event/memory_dump_manager.cc:362 base::trace_event::TraceLog::ctor() base/trace_event/trace_log.cc:368 base::Singleton<>::get() base/memory/singleton.h:258 base::trace_event::EnableFilteringForPseudoStackProfiling() base/trace_event/memory_dump_manager.cc:117 base::trace_event::MemoryDumpManager::EnableHeapProfiling() base/trace_event/memory_dump_manager.cc:259 base::trace_event::MemoryDumpManager::EnableHeapProfilingIfNeeded() base/trace_event/memory_dump_manager.cc:227 tracing::EnableStartupTracingIfNeeded() components/tracing/common/trace_startup.cc:23 Basically we have that story: 1. Create MemoryDumpManager instance 2. Try to EnableHeapProfiling() when TraceLog is not created yet, MemoryDumpManager's lock got acquired 3. Create TraceLog as a part or lazy singleton dereference 4. TraceLog calls MemoryDumpManager::RegisterDumpProvider() which also acquires MemoryDumpManager's lock 5. Deadlock I think would be reasonable to poke TraceLog's singleton before EnableHeapProfiling().
,
Sep 12 2017
add a call to TraceLog::GetInstance() in EnableHeapProfilingIfNeeded so it gets initialized first?
,
Sep 13 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/0155e3e8f932f9e79202525001da661e7c48962a commit 0155e3e8f932f9e79202525001da661e7c48962a Author: Greg Kraynov <kraynov@chromium.org> Date: Wed Sep 13 16:45:40 2017 Avoid deadlock in MemoryDumpManager::EnableHeapProfiling. Heap profiling may be requested to get enabled in stages when TraceLog is not created yet. Since TraceLog calls other MDM's lock-protected methods it can cause a deadlock. Bug: 764357 Change-Id: Ica08b4478aa09e03a3fa0761ec8ed787b1922cb6 Reviewed-on: https://chromium-review.googlesource.com/663722 Reviewed-by: Primiano Tucci <primiano@chromium.org> Reviewed-by: Siddhartha S <ssid@chromium.org> Commit-Queue: Grigoriy Kraynov <kraynov@chromium.org> Cr-Commit-Position: refs/heads/master@{#501662} [modify] https://crrev.com/0155e3e8f932f9e79202525001da661e7c48962a/components/tracing/common/trace_startup.cc
,
Sep 29 2017
|
|||||||||||||||||||||||||
►
Sign in to add a comment |
|||||||||||||||||||||||||
Comment 1 by kraynov@chromium.org
, Sep 12 2017