debuggerd_client: resolve tid to tgid when dumping Java stacks.

Bug: http://b/121438213
Test: debuggerd_test32
Test: debuggerd_test64
Change-Id: I4d114c8b0c4586ba64de5b45b47b0ec5c10354f8
This commit is contained in:
Josh Gao 2019-01-04 13:57:09 -08:00
parent 79f304771c
commit 4175cee3cc
2 changed files with 16 additions and 2 deletions

View file

@ -150,6 +150,7 @@ cc_library {
shared_libs: [
"libbase",
"libcutils",
"libprocinfo",
],
export_header_lib_headers: ["libdebuggerd_common_headers"],

View file

@ -33,6 +33,7 @@
#include <android-base/strings.h>
#include <android-base/unique_fd.h>
#include <cutils/sockets.h>
#include <procinfo/process.h>
#include "debuggerd/handler.h"
#include "protocol.h"
@ -62,8 +63,20 @@ static void populate_timeval(struct timeval* tv, const Duration& duration) {
tv->tv_usec = static_cast<long>(microseconds.count());
}
bool debuggerd_trigger_dump(pid_t pid, DebuggerdDumpType dump_type, unsigned int timeout_ms,
bool debuggerd_trigger_dump(pid_t tid, DebuggerdDumpType dump_type, unsigned int timeout_ms,
unique_fd output_fd) {
pid_t pid = tid;
if (dump_type == kDebuggerdJavaBacktrace) {
// Java dumps always get sent to the tgid, so we need to resolve our tid to a tgid.
android::procinfo::ProcessInfo procinfo;
std::string error;
if (!android::procinfo::GetProcessInfo(tid, &procinfo, &error)) {
LOG(ERROR) << "libdebugged_client: failed to get process info: " << error;
return -1;
}
pid = procinfo.pid;
}
LOG(INFO) << "libdebuggerd_client: started dumping process " << pid;
unique_fd sockfd;
const auto end = std::chrono::steady_clock::now() + std::chrono::milliseconds(timeout_ms);
@ -162,7 +175,7 @@ bool debuggerd_trigger_dump(pid_t pid, DebuggerdDumpType dump_type, unsigned int
return false;
}
if (!send_signal(pid, dump_type)) {
if (!send_signal(tid, dump_type)) {
return false;
}