From: Thomas Abraham Date: Thu, 25 Apr 2019 18:56:22 +0000 (-0400) Subject: lib/spawn.c run_command: don't loop forever if waitpid() is returning ECHILD X-Git-Tag: 4.7~3^2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1697c192acc763682ee9883aa94fe871246403c0;p=shadow lib/spawn.c run_command: don't loop forever if waitpid() is returning ECHILD If SIGCHILD is being ignored, waitpid() will forever error with ECHILD and this loop with never end, so don't loop if it erros with ECHILD. --- diff --git a/lib/spawn.c b/lib/spawn.c index fc4ad95c..79f5054e 100644 --- a/lib/spawn.c +++ b/lib/spawn.c @@ -68,8 +68,9 @@ int run_command (const char *cmd, const char *argv[], do { wpid = waitpid (pid, status, 0); - } while ( ((pid_t)-1 == wpid && errno == EINTR) - || ((pid_t)-1 != wpid && wpid != pid)); + } while ( ((pid_t)-1 == wpid && errno != ECHILD) + && (((pid_t)-1 == wpid && errno == EINTR) + || ((pid_t)-1 != wpid && wpid != pid))); if ((pid_t)-1 == wpid) { fprintf (stderr, "%s: waitpid (status: %d): %s\n",