Commit 6072744f authored by topjohnwu's avatar topjohnwu

Prevent logcat monitors crashing

parent a87ad35a
......@@ -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);
char *const command[] = { "logcat", "-v", "brief", NULL };
debug_log_pid = run_command(0, &debug_log_fd, "/system/bin/logcat", command);
close(debug_log_fd);
#endif
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
kill(debug_log_pid, SIGTERM);
waitpid(debug_log_pid, NULL, 0);
close(debug_log_fd);
#endif
}
......@@ -31,7 +31,10 @@ static void *logger_thread(void *args) {
if (log_pid > 0)
waitpid(log_pid, NULL, 0);
// 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...
......
......@@ -180,7 +180,10 @@ void proc_monitor() {
while (1) {
// 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
char *const command[] = { "logcat", "-b", "events", "-v", "raw", "-s", "am_proc_start", NULL };
......@@ -269,6 +272,5 @@ void proc_monitor() {
kill(log_pid, SIGTERM);
waitpid(log_pid, NULL, 0);
close(log_fd);
log_pid = 0;
}
}
......@@ -232,8 +232,6 @@ int run_command(int err, int *fd, const char *path, char *const argv[]) {
if (xpipe2(pipefd, O_CLOEXEC) == -1)
return -1;
writeEnd = pipefd[1];
// Give the read end of the pipe
*fd = pipefd[0];
} else {
writeEnd = *fd;
}
......@@ -241,7 +239,11 @@ int run_command(int err, int *fd, const char *path, char *const argv[]) {
int pid = fork();
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;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment