Fix broken logging in Zygote.cpp.

- Differentiate between clean exits and signals.
- Change the logic for the waitpid warning. We should log it
  only if the *first* call to waitpid returned ECHILD.

Change-Id: I6bc50e4ffd100fb7f3f526d6b4056bed10b8045f
This commit is contained in:
Narayan Kamath
2014-04-14 14:46:07 +01:00
parent 86315c452b
commit 160992da04

View File

@@ -92,14 +92,10 @@ static void SigChldHandler(int /*signal_number*/) {
if (WIFEXITED(status)) {
if (WEXITSTATUS(status)) {
ALOGI("Process %d exited cleanly (%d)", pid, WEXITSTATUS(status));
} else if (false) {
ALOGI("Process %d exited cleanly (%d)", pid, WEXITSTATUS(status));
}
} else if (WIFSIGNALED(status)) {
if (WTERMSIG(status) != SIGKILL) {
ALOGI("Process %d exited cleanly (%d)", pid, WTERMSIG(status));
} else if (false) {
ALOGI("Process %d exited cleanly (%d)", pid, WTERMSIG(status));
ALOGI("Process %d exited due to signal (%d)", pid, WTERMSIG(status));
}
#ifdef WCOREDUMP
if (WCOREDUMP(status)) {
@@ -117,8 +113,10 @@ static void SigChldHandler(int /*signal_number*/) {
}
}
if (pid < 0) {
ALOGW("Zygote SIGCHLD error in waitpid: %d", errno);
// Note that we shouldn't consider ECHILD an error because
// the secondary zygote might have no children left to wait for.
if (pid < 0 && errno != ECHILD) {
ALOGW("Zygote SIGCHLD error in waitpid: %s", strerror(errno));
}
}