diff options
Diffstat (limited to 'debuggerd/handler/debuggerd_fallback.cpp')
-rw-r--r-- | debuggerd/handler/debuggerd_fallback.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/debuggerd/handler/debuggerd_fallback.cpp b/debuggerd/handler/debuggerd_fallback.cpp index dea2e17eb..079a574d3 100644 --- a/debuggerd/handler/debuggerd_fallback.cpp +++ b/debuggerd/handler/debuggerd_fallback.cpp | |||
@@ -304,7 +304,16 @@ static void crash_handler(siginfo_t* info, ucontext_t* ucontext, void* abort_mes | |||
304 | 304 | ||
305 | crash_mutex.lock(); | 305 | crash_mutex.lock(); |
306 | if (lock_count++ > 0) { | 306 | if (lock_count++ > 0) { |
307 | async_safe_format_log(ANDROID_LOG_ERROR, "libc", "recursed signal handler call, exiting"); | 307 | async_safe_format_log(ANDROID_LOG_ERROR, "libc", "recursed signal handler call, aborting"); |
308 | signal(SIGABRT, SIG_DFL); | ||
309 | raise(SIGABRT); | ||
310 | sigset_t sigset; | ||
311 | sigemptyset(&sigset); | ||
312 | sigaddset(&sigset, SIGABRT); | ||
313 | sigprocmask(SIG_UNBLOCK, &sigset, nullptr); | ||
314 | |||
315 | // Just in case... | ||
316 | async_safe_format_log(ANDROID_LOG_ERROR, "libc", "abort didn't exit, exiting"); | ||
308 | _exit(1); | 317 | _exit(1); |
309 | } | 318 | } |
310 | 319 | ||