diff options
author | Josh Gao <jmgao@google.com> | 2017-01-22 17:59:02 -0800 |
---|---|---|
committer | Josh Gao <jmgao@google.com> | 2017-01-23 11:39:31 -0800 |
commit | 7c6e3133f57b6c908e211c0013fcb68d5a44d919 (patch) | |
tree | 4dcc472531afdb58afad41e572cbc10da50df259 /debuggerd/debuggerd_test.cpp | |
parent | 122479f4a0774a2a5599e6052ad427cbbeb8094a (diff) |
crash_dump: set a watchdog timer.
PTRACE_DETACH is only necessary if the process is in group-stop state,
the tracer exiting is sufficient to detach and resume tracees.
Using this, set a 5 second timer with alarm(2) that just kills us, to
avoid leaving processes stopped.
Bug: http://b/34472671
Test: debuggerd_test
Test: crasher + manually inserting a 10 second sleep into crash_dump
Change-Id: Iacaa796f79037aa1585f3f2159abe45ef0069311
Diffstat (limited to 'debuggerd/debuggerd_test.cpp')
-rw-r--r-- | debuggerd/debuggerd_test.cpp | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/debuggerd/debuggerd_test.cpp b/debuggerd/debuggerd_test.cpp index f51b5f253..3b2419365 100644 --- a/debuggerd/debuggerd_test.cpp +++ b/debuggerd/debuggerd_test.cpp @@ -340,24 +340,15 @@ TEST_F(CrasherTest, wait_for_gdb) { AssertDeath(SIGABRT); } +// wait_for_gdb shouldn't trigger on manually sent signals. TEST_F(CrasherTest, wait_for_gdb_signal) { if (!android::base::SetProperty(kWaitForGdbKey, "1")) { FAIL() << "failed to enable wait_for_gdb"; } StartCrasher("abort"); - ASSERT_EQ(0, kill(crasher_pid, SIGABRT)) << strerror(errno); - - std::this_thread::sleep_for(500ms); - - int status; - ASSERT_EQ(crasher_pid, (TIMEOUT(1, waitpid(crasher_pid, &status, WUNTRACED)))); - ASSERT_TRUE(WIFSTOPPED(status)); - ASSERT_EQ(SIGSTOP, WSTOPSIG(status)); - - ASSERT_EQ(0, kill(crasher_pid, SIGCONT)) << strerror(errno); - - AssertDeath(SIGABRT); + ASSERT_EQ(0, kill(crasher_pid, SIGSEGV)) << strerror(errno); + AssertDeath(SIGSEGV); } TEST_F(CrasherTest, backtrace) { |