summaryrefslogtreecommitdiff
path: root/libc/malloc_debug/malloc_debug.cpp
diff options
context:
space:
mode:
authorChristopher Ferris <cferris@google.com>2018-07-10 14:45:24 -0700
committerChristopher Ferris <cferris@google.com>2018-07-11 15:23:00 -0700
commit97b474710225bc4853ab314c3d9ca812dc375525 (patch)
treedca19aa52db541c9ef7832d41d1630e81159b12a /libc/malloc_debug/malloc_debug.cpp
parent06f217d399b1bf6345e4c71b014cdaac3d1c183a (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.cpp9
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;