waitpid may fail for various reasons, being interrupted being
the most frequent. In such a case, status is left uninitialized
which results in the WIFSIGNALED and WIFEXITED macros returning
undefined value, resulting in surprising logging statements such
as "killed by signal 114".
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
kill(getppid(), SIGTERM); /* wake parent */
exit(EXIT_FAILURE);
} else if (pid > 0) {
- int status;
-
/*
* In daemon mode (--daemonize), sessiond only exits when
* it's ready to accept commands.
*/
for (;;) {
- waitpid(pid, &status, 0);
+ int status;
+ pid_t wait_pid_ret = waitpid(pid, &status, 0);
+
+ if (wait_pid_ret < 0) {
+ if (errno == EINTR) {
+ continue;
+ }
+ PERROR("waitpid");
+ ret = -errno;
+ goto end;
+ }
if (WIFSIGNALED(status)) {
ERR("Session daemon was killed by signal %d",