From b0e51e388b8c952e28280f0e7035dc18fb9aa4e5 Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Thu, 1 Jun 2017 12:08:10 -0700 Subject: [PATCH] crash_dump: don't notify ActivityManager if it crashed. Bug: http://b/38427757 Test: killall -ABRT system_server, plus added logging Change-Id: Ic15e0b0870b1ec08a2f165ad0e5356afed02eece --- debuggerd/crash_dump.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/debuggerd/crash_dump.cpp b/debuggerd/crash_dump.cpp index fbf56767c..558bc721a 100644 --- a/debuggerd/crash_dump.cpp +++ b/debuggerd/crash_dump.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include "backtrace.h" @@ -99,8 +100,9 @@ static bool ptrace_seize_thread(int pid_proc_fd, pid_t tid, std::string* error) return true; } -static bool activity_manager_notify(int pid, int signal, const std::string& amfd_data) { - android::base::unique_fd amfd(socket_local_client("/data/system/ndebugsocket", ANDROID_SOCKET_NAMESPACE_FILESYSTEM, SOCK_STREAM)); +static bool activity_manager_notify(pid_t pid, int signal, const std::string& amfd_data) { + android::base::unique_fd amfd(socket_local_client( + "/data/system/ndebugsocket", ANDROID_SOCKET_NAMESPACE_FILESYSTEM, SOCK_STREAM)); if (amfd.get() == -1) { PLOG(ERROR) << "unable to connect to activity manager"; return false; @@ -413,7 +415,10 @@ int main(int argc, char** argv) { } if (fatal_signal) { - activity_manager_notify(target, signo, amfd_data); + // Don't try to notify ActivityManager if it just crashed, or we might hang until timeout. + if (target_info.name != "system_server" || target_info.uid != AID_SYSTEM) { + activity_manager_notify(target, signo, amfd_data); + } } // Close stdout before we notify tombstoned of completion.