Prevent logcat monitors crashing

This commit is contained in:
topjohnwu 2017-07-16 03:54:06 +08:00
parent a87ad35a50
commit 6072744f7e
4 changed files with 14 additions and 7 deletions

View File

@ -489,6 +489,7 @@ void post_fs_data(int client) {
debug_log_fd = xopen(DEBUG_LOG, O_WRONLY | O_CREAT | O_CLOEXEC | O_TRUNC, 0644); debug_log_fd = xopen(DEBUG_LOG, O_WRONLY | O_CREAT | O_CLOEXEC | O_TRUNC, 0644);
char *const command[] = { "logcat", "-v", "brief", NULL }; char *const command[] = { "logcat", "-v", "brief", NULL };
debug_log_pid = run_command(0, &debug_log_fd, "/system/bin/logcat", command); debug_log_pid = run_command(0, &debug_log_fd, "/system/bin/logcat", command);
close(debug_log_fd);
#endif #endif
LOGI("** post-fs-data mode running\n"); LOGI("** post-fs-data mode running\n");
@ -776,6 +777,5 @@ void late_start(int client) {
// Stop recording the boot logcat after every boot task is done // Stop recording the boot logcat after every boot task is done
kill(debug_log_pid, SIGTERM); kill(debug_log_pid, SIGTERM);
waitpid(debug_log_pid, NULL, 0); waitpid(debug_log_pid, NULL, 0);
close(debug_log_fd);
#endif #endif
} }

View File

@ -31,7 +31,10 @@ static void *logger_thread(void *args) {
if (log_pid > 0) if (log_pid > 0)
waitpid(log_pid, NULL, 0); waitpid(log_pid, NULL, 0);
// For some reason it went here, clear buffer and restart // For some reason it went here, clear buffer and restart
system("logcat -c"); char *const restart[] = { "logcat", "-c", NULL };
log_pid = run_command(0, NULL, "/system/bin/logcat", restart);
if (log_pid > 0)
waitpid(log_pid, NULL, 0);
} }
// Should never be here, but well... // Should never be here, but well...

View File

@ -180,7 +180,10 @@ void proc_monitor() {
while (1) { while (1) {
// Clear previous logcat buffer // Clear previous logcat buffer
system("logcat -b events -c"); char *const restart[] = { "logcat", "-b", "events", "-c", NULL };
log_pid = run_command(0, NULL, "/system/bin/logcat", restart);
if (log_pid > 0)
waitpid(log_pid, NULL, 0);
// Monitor am_proc_start // Monitor am_proc_start
char *const command[] = { "logcat", "-b", "events", "-v", "raw", "-s", "am_proc_start", NULL }; char *const command[] = { "logcat", "-b", "events", "-v", "raw", "-s", "am_proc_start", NULL };
@ -269,6 +272,5 @@ void proc_monitor() {
kill(log_pid, SIGTERM); kill(log_pid, SIGTERM);
waitpid(log_pid, NULL, 0); waitpid(log_pid, NULL, 0);
close(log_fd); close(log_fd);
log_pid = 0;
} }
} }

View File

@ -232,8 +232,6 @@ int run_command(int err, int *fd, const char *path, char *const argv[]) {
if (xpipe2(pipefd, O_CLOEXEC) == -1) if (xpipe2(pipefd, O_CLOEXEC) == -1)
return -1; return -1;
writeEnd = pipefd[1]; writeEnd = pipefd[1];
// Give the read end of the pipe
*fd = pipefd[0];
} else { } else {
writeEnd = *fd; writeEnd = *fd;
} }
@ -241,7 +239,11 @@ int run_command(int err, int *fd, const char *path, char *const argv[]) {
int pid = fork(); int pid = fork();
if (pid != 0) { if (pid != 0) {
close(writeEnd); if (fd && *fd < 0) {
// Give the read end and close write end
*fd = pipefd[0];
close(pipefd[1]);
}
return pid; return pid;
} }