diff options
author | Christopher Ferris <cferris@google.com> | 2018-07-10 14:45:24 -0700 |
---|---|---|
committer | Christopher Ferris <cferris@google.com> | 2018-07-11 15:23:00 -0700 |
commit | 97b474710225bc4853ab314c3d9ca812dc375525 (patch) | |
tree | dca19aa52db541c9ef7832d41d1630e81159b12a /libc/malloc_debug/malloc_debug.cpp | |
parent | 06f217d399b1bf6345e4c71b014cdaac3d1c183a (diff) |
Disable malloc debug intercepts when exiting.
There is a hang when enabling leak_track since the dumping of the
leak data can wind up doing an allocation.
Add new system unit test to make sure this doesn't happen again.
Bug: 111146059
Test: Test program that leaks does not hang forever.
Test: Unit tests pass.
Change-Id: Icf99be58ba5db98ee124a471b957a086045f5870
Diffstat (limited to 'libc/malloc_debug/malloc_debug.cpp')
-rw-r--r-- | libc/malloc_debug/malloc_debug.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/libc/malloc_debug/malloc_debug.cpp b/libc/malloc_debug/malloc_debug.cpp index 1e7086c7d..2e3a0a333 100644 --- a/libc/malloc_debug/malloc_debug.cpp +++ b/libc/malloc_debug/malloc_debug.cpp @@ -254,6 +254,9 @@ void debug_finalize() { return; } + // Turn off capturing allocations calls. + DebugDisableSet(true); + if (g_debug->config().options() & FREE_TRACK) { PointerData::VerifyAllFreed(); } @@ -263,15 +266,11 @@ void debug_finalize() { } if ((g_debug->config().options() & BACKTRACE) && g_debug->config().backtrace_dump_on_exit()) { - ScopedDisableDebugCalls disable; debug_dump_heap(android::base::StringPrintf("%s.%d.exit.txt", g_debug->config().backtrace_dump_prefix().c_str(), - getpid()) - .c_str()); + getpid()).c_str()); } - DebugDisableSet(true); - backtrace_shutdown(); delete g_debug; |