# HG changeset patch # User jbe # Date 1497740505 -7200 # Node ID 09d6428fdf6ced2402a4dc5486871fe743719efa # Parent dd0ec48592e70930fe550a683ea9584060686500 Fixed wrong treatment of waitpid() return value in moonbridge_io.poll(...) diff -r dd0ec48592e7 -r 09d6428fdf6c moonbridge_io.c --- a/moonbridge_io.c Sat Jun 17 22:43:44 2017 +0200 +++ b/moonbridge_io.c Sun Jun 18 01:01:45 2017 +0200 @@ -1671,7 +1671,7 @@ int use_timeout = 0; // negative for negative timeout int check_sigterm = 0; int check_sigchld = 0; - int childstatus; + pid_t waitedpid; sigset_t mask, orig_mask; int status; FD_ZERO(&readfds); @@ -1708,11 +1708,14 @@ moonbr_io_sigchld_flag = 0; signal(SIGCHLD, moonbr_io_sigchld_handler); } - if (waitpid(child->pid, &childstatus, WNOHANG|WNOWAIT) != -1) { + while ((waitedpid = waitpid(child->pid, &status, WNOHANG|WNOWAIT)) == -1) { + if (errno != EINTR) { + moonbr_io_prepare_errmsg(); + luaL_error(L, "Error in waitpid call: %s", errmsg); + } + } + if (waitedpid) { force_wakeup = 1; - } else if (errno != ECHILD && errno != EINTR) { - moonbr_io_prepare_errmsg(); - luaL_error(L, "Error in waitpid call: %s", errmsg); } continue; } else {