diff options
author | Josh Gao <jmgao@google.com> | 2017-12-23 00:15:18 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-12-23 00:15:18 +0000 |
commit | 65e2c06a9063b5c22edbc4ba6ead8057c97e8aaf (patch) | |
tree | 3c160e62cfdee0f83ddb0a79430fea96db8a4242 /debuggerd/handler/debuggerd_handler.cpp | |
parent | 64bf32d99983b712e5bef9cc5b4454d7c0d6b819 (diff) | |
parent | 1f3b605c4185bb37c0bcf2782b1a0fbef33e7d77 (diff) |
Merge "debuggerd: wait for dump completion on crashes."
am: 1f3b605c41
Change-Id: I21dfb7a7efba253e8d3c58a80a819d520b030c04
Diffstat (limited to 'debuggerd/handler/debuggerd_handler.cpp')
-rw-r--r-- | debuggerd/handler/debuggerd_handler.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/debuggerd/handler/debuggerd_handler.cpp b/debuggerd/handler/debuggerd_handler.cpp index 02bc4b84f..96f3c7c54 100644 --- a/debuggerd/handler/debuggerd_handler.cpp +++ b/debuggerd/handler/debuggerd_handler.cpp @@ -395,9 +395,6 @@ static int debuggerd_dispatch_pseudothread(void* arg) { // crash_dump is ptracing us, fork off a copy of our address space for it to use. create_vm_process(); - input_read.reset(); - input_write.reset(); - // Don't leave a zombie child. int status; if (TEMP_FAILURE_RETRY(waitpid(crash_dump_pid, &status, 0)) == -1) { @@ -406,6 +403,14 @@ static int debuggerd_dispatch_pseudothread(void* arg) { } else if (WIFSTOPPED(status) || WIFSIGNALED(status)) { async_safe_format_log(ANDROID_LOG_FATAL, "libc", "crash_dump helper crashed or stopped"); } + + if (thread_info->siginfo->si_signo != DEBUGGER_SIGNAL) { + // For crashes, we don't need to minimize pause latency. + // Wait for the dump to complete before having the process exit, to avoid being murdered by + // ActivityManager or init. + TEMP_FAILURE_RETRY(read(input_read, &buf, sizeof(buf))); + } + return 0; } |