From 1697c192acc763682ee9883aa94fe871246403c0 Mon Sep 17 00:00:00 2001 From: Thomas Abraham Date: Thu, 25 Apr 2019 14:56:22 -0400 Subject: [PATCH] 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. --- lib/spawn.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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",