summaryrefslogtreecommitdiff
path: root/debuggerd/debuggerd.cpp
diff options
context:
space:
mode:
authorJosh Gao <jmgao@google.com>2016-03-17 15:14:43 -0700
committerJosh Gao <jmgao@google.com>2016-03-17 15:33:24 -0700
commite59c76ab620b9b0e45d41cc0ea6e472ce1ab2950 (patch)
tree129e8e62791b5288518125798a3e733e41579a3f /debuggerd/debuggerd.cpp
parenta775e6269308db9c56a8b53b85e7bfbb739b2221 (diff)
debuggerd: don't apply timeout when wait_for_gdb is on.
Change-Id: Ic632dde4a0510c212a4b1c01890df9a41e9771c9 (cherry picked from commit 676a756b7b6e4028633dac85110767a3cf6785a7)
Diffstat (limited to 'debuggerd/debuggerd.cpp')
-rw-r--r--debuggerd/debuggerd.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/debuggerd/debuggerd.cpp b/debuggerd/debuggerd.cpp
index fff28802a..97f40963c 100644
--- a/debuggerd/debuggerd.cpp
+++ b/debuggerd/debuggerd.cpp
@@ -248,8 +248,8 @@ static int read_request(int fd, debugger_request_t* out_request) {
return 0;
}
-static bool should_attach_gdb(debugger_request_t* request) {
- if (request->action == DEBUGGER_ACTION_CRASH) {
+static bool should_attach_gdb(const debugger_request_t& request) {
+ if (request.action == DEBUGGER_ACTION_CRASH) {
return property_get_bool("debug.debuggerd.wait_for_gdb", false);
}
return false;
@@ -487,7 +487,7 @@ static void worker_process(int fd, debugger_request_t& request) {
// Don't attach to the sibling threads if we want to attach gdb.
// Supposedly, it makes the process less reliable.
- bool attach_gdb = should_attach_gdb(&request);
+ bool attach_gdb = should_attach_gdb(request);
if (attach_gdb) {
// Open all of the input devices we need to listen for VOLUMEDOWN before dropping privileges.
if (init_getevent() != 0) {
@@ -563,6 +563,10 @@ static void worker_process(int fd, debugger_request_t& request) {
static void monitor_worker_process(int child_pid, const debugger_request_t& request) {
struct timespec timeout = {.tv_sec = 10, .tv_nsec = 0 };
+ if (should_attach_gdb(request)) {
+ // If wait_for_gdb is enabled, set the timeout to something large.
+ timeout.tv_sec = INT_MAX;
+ }
sigset_t signal_set;
sigemptyset(&signal_set);