Mercurial > hg > octave-nkf > gnulib-hg
changeset 10193:b67d0f4f1513
Try to fix waitid() based code.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Tue, 10 Jun 2008 13:55:34 +0200 |
parents | 0553e4d56bcc |
children | 8297e6235e2d |
files | ChangeLog lib/wait-process.c |
diffstat | 2 files changed, 10 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-06-10 Bruno Haible <bruno@clisp.org> + + * lib/wait-process.c (wait_subprocess): Try to fix waitid() based code. + 2008-06-10 Bruno Haible <bruno@clisp.org> * tests/test-memmem.c (main): Reset SIGALRM to default handling before
--- a/lib/wait-process.c +++ b/lib/wait-process.c @@ -253,9 +253,9 @@ bool slave_process, bool exit_on_error) { #if HAVE_WAITID && defined WNOWAIT && 0 - /* Commented out because waitid() with WNOWAIT doesn't work: On Solaris 7 - and OSF/1 4.0, it returns -1 and sets errno = ECHILD, and on HP-UX 10.20 - it just hangs. */ + /* Commented out because waitid() without WEXITED and with WNOWAIT doesn't + work: On Solaris 7 and OSF/1 4.0, it returns -1 and sets errno = ECHILD, + and on HP-UX 10.20 it just hangs. */ /* Use of waitid() with WNOWAIT avoids a race condition: If slave_process is true, and this process sleeps a very long time between the return from waitpid() and the execution of unregister_slave_subprocess(), and @@ -265,7 +265,8 @@ siginfo_t info; for (;;) { - if (waitid (P_PID, child, &info, slave_process ? WNOWAIT : 0) < 0) + if (waitid (P_PID, child, &info, WEXITED | (slave_process ? WNOWAIT : 0)) + < 0) { # ifdef EINTR if (errno == EINTR) @@ -297,7 +298,7 @@ /* Now remove the zombie from the process list. */ for (;;) { - if (waitid (P_PID, child, &info, 0) < 0) + if (waitid (P_PID, child, &info, WEXITED) < 0) { # ifdef EINTR if (errno == EINTR)