Merge "init: remove DumpShutdownDebugInformation()"

This commit is contained in:
Tom Cherry 2020-12-10 18:55:52 +00:00 committed by Gerrit Code Review
commit 6ece3c44fe
3 changed files with 1 additions and 52 deletions

View file

@ -266,12 +266,10 @@ void DebugRebootLogging() {
if (shutdown_state.do_shutdown()) {
LOG(ERROR) << "sys.powerctl set while a previous shutdown command has not been handled";
UnwindMainThreadStack();
DumpShutdownDebugInformation();
}
if (IsShuttingDown()) {
LOG(ERROR) << "sys.powerctl set while init is already shutting down";
UnwindMainThreadStack();
DumpShutdownDebugInformation();
}
}
@ -760,7 +758,7 @@ int SecondStageMain(int argc, char** argv) {
trigger_shutdown = [](const std::string& command) { shutdown_state.TriggerShutdown(command); };
SetStdioToDevNull(argv);
InitSecondStageLogging(argv);
InitKernelLogging(argv);
LOG(INFO) << "init second stage started!";
// Update $PATH in the case the second stage init is newer than first stage init, where it is

View file

@ -30,9 +30,7 @@
#include <time.h>
#include <unistd.h>
#include <mutex>
#include <thread>
#include <vector>
#include <android-base/file.h>
#include <android-base/logging.h>
@ -724,50 +722,5 @@ bool IsRecoveryMode() {
return access("/system/bin/recovery", F_OK) == 0;
}
// TODO(b/155203339): remove this
// Devices in the lab seem to be stuck during shutdown, but the logs don't capture the last actions
// before shutdown started, so we record those lines, ignoring requests to shutdown, and replay them
// if we identify that the device is stuck.
constexpr size_t kRecordedLogsSize = 30;
std::string recorded_logs[kRecordedLogsSize];
size_t recorded_log_position = 0;
std::mutex recorded_logs_lock;
void InitSecondStageLogging(char** argv) {
SetFatalRebootTarget();
auto second_stage_logger = [](android::base::LogId log_id, android::base::LogSeverity severity,
const char* tag, const char* file, unsigned int line,
const char* message) {
// We only store logs for init, not its children, and only if they're not related to
// sys.powerctl.
if (getpid() == 1 && strstr(message, "sys.powerctl") == nullptr) {
auto lock = std::lock_guard{recorded_logs_lock};
recorded_logs[recorded_log_position++] = message;
if (recorded_log_position == kRecordedLogsSize) {
recorded_log_position = 0;
}
}
android::base::KernelLogger(log_id, severity, tag, file, line, message);
};
android::base::InitLogging(argv, second_stage_logger, InitAborter);
}
void DumpShutdownDebugInformation() {
auto lock = std::lock_guard{recorded_logs_lock};
android::base::KernelLogger(
android::base::MAIN, android::base::ERROR, "init", nullptr, 0,
"===================== Dumping previous init lines =====================");
for (size_t i = recorded_log_position; i < kRecordedLogsSize; ++i) {
android::base::KernelLogger(android::base::MAIN, android::base::ERROR, "init", nullptr, 0,
recorded_logs[i].c_str());
}
for (size_t i = 0; i < recorded_log_position; ++i) {
android::base::KernelLogger(android::base::MAIN, android::base::ERROR, "init", nullptr, 0,
recorded_logs[i].c_str());
}
android::base::KernelLogger(android::base::MAIN, android::base::ERROR, "init", nullptr, 0,
"===================== End of dump =====================");
}
} // namespace init
} // namespace android

View file

@ -98,8 +98,6 @@ Result<std::string> ParseUmountAll(const std::vector<std::string>& args);
void SetStdioToDevNull(char** argv);
void InitKernelLogging(char** argv);
void InitSecondStageLogging(char** argv);
void DumpShutdownDebugInformation();
bool IsRecoveryMode();
} // namespace init
} // namespace android