Merge "Re-add code to skip gettings logs on logd crashes." into udc-dev
This commit is contained in:
commit
da10417125
2 changed files with 64 additions and 1 deletions
|
|
@ -20,6 +20,7 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <linux/prctl.h>
|
#include <linux/prctl.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#include <pthread.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/capability.h>
|
#include <sys/capability.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
|
@ -2703,3 +2704,58 @@ TEST_F(CrasherTest, verify_build_id) {
|
||||||
}
|
}
|
||||||
ASSERT_TRUE(found_valid_elf) << "Did not find any elf files with valid BuildIDs to check.";
|
ASSERT_TRUE(found_valid_elf) << "Did not find any elf files with valid BuildIDs to check.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char kLogMessage[] = "Should not see this log message.";
|
||||||
|
|
||||||
|
// Verify that the logd process does not read the log.
|
||||||
|
TEST_F(CrasherTest, logd_skips_reading_logs) {
|
||||||
|
StartProcess([]() {
|
||||||
|
pthread_setname_np(pthread_self(), "logd");
|
||||||
|
LOG(INFO) << kLogMessage;
|
||||||
|
abort();
|
||||||
|
});
|
||||||
|
|
||||||
|
unique_fd output_fd;
|
||||||
|
StartIntercept(&output_fd);
|
||||||
|
FinishCrasher();
|
||||||
|
AssertDeath(SIGABRT);
|
||||||
|
int intercept_result;
|
||||||
|
FinishIntercept(&intercept_result);
|
||||||
|
ASSERT_EQ(1, intercept_result) << "tombstoned reported failure";
|
||||||
|
|
||||||
|
std::string result;
|
||||||
|
ConsumeFd(std::move(output_fd), &result);
|
||||||
|
// logd should not contain our log message.
|
||||||
|
ASSERT_NOT_MATCH(result, kLogMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify that the logd process does not read the log when the non-main
|
||||||
|
// thread crashes.
|
||||||
|
TEST_F(CrasherTest, logd_skips_reading_logs_not_main_thread) {
|
||||||
|
StartProcess([]() {
|
||||||
|
pthread_setname_np(pthread_self(), "logd");
|
||||||
|
LOG(INFO) << kLogMessage;
|
||||||
|
|
||||||
|
std::thread thread([]() {
|
||||||
|
pthread_setname_np(pthread_self(), "not_logd_thread");
|
||||||
|
// Raise the signal on the side thread.
|
||||||
|
raise_debugger_signal(kDebuggerdTombstone);
|
||||||
|
});
|
||||||
|
thread.join();
|
||||||
|
_exit(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
unique_fd output_fd;
|
||||||
|
StartIntercept(&output_fd, kDebuggerdTombstone);
|
||||||
|
FinishCrasher();
|
||||||
|
AssertDeath(0);
|
||||||
|
|
||||||
|
int intercept_result;
|
||||||
|
FinishIntercept(&intercept_result);
|
||||||
|
ASSERT_EQ(1, intercept_result) << "tombstoned reported failure";
|
||||||
|
|
||||||
|
std::string result;
|
||||||
|
ConsumeFd(std::move(output_fd), &result);
|
||||||
|
ASSERT_BACKTRACE_FRAME(result, "raise_debugger_signal");
|
||||||
|
ASSERT_NOT_MATCH(result, kLogMessage);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -690,7 +690,14 @@ void engrave_tombstone_proto(Tombstone* tombstone, unwindstack::AndroidUnwinder*
|
||||||
|
|
||||||
// Only dump logs on debuggable devices.
|
// Only dump logs on debuggable devices.
|
||||||
if (android::base::GetBoolProperty("ro.debuggable", false)) {
|
if (android::base::GetBoolProperty("ro.debuggable", false)) {
|
||||||
dump_logcat(&result, main_thread.pid);
|
// Get the thread that corresponds to the main pid of the process.
|
||||||
|
const ThreadInfo& thread = threads.at(main_thread.pid);
|
||||||
|
|
||||||
|
// Do not attempt to dump logs of the logd process because the gathering
|
||||||
|
// of logs can hang until a timeout occurs.
|
||||||
|
if (thread.thread_name != "logd") {
|
||||||
|
dump_logcat(&result, main_thread.pid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dump_open_fds(&result, open_files);
|
dump_open_fds(&result, open_files);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue