summaryrefslogtreecommitdiff
path: root/debuggerd/handler/debuggerd_handler.cpp
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2017-12-23 00:11:34 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2017-12-23 00:11:34 +0000
commit1f3b605c4185bb37c0bcf2782b1a0fbef33e7d77 (patch)
tree3c160e62cfdee0f83ddb0a79430fea96db8a4242 /debuggerd/handler/debuggerd_handler.cpp
parent18f25d399e170b9944fd7eb23c48d88e51db45ce (diff)
parent7302097e776e037c5caedbc985dfff69fdac7d4d (diff)
Merge "debuggerd: wait for dump completion on crashes."
Diffstat (limited to 'debuggerd/handler/debuggerd_handler.cpp')
-rw-r--r--debuggerd/handler/debuggerd_handler.cpp11
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;
}