+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
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
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)
/* 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)