ITS#6037: don't loop forever on EINTR in wait4child()

This commit is contained in:
Hallvard Furuseth 2009-03-26 22:12:12 +00:00
parent 1e470657b2
commit 3e57c96acd

View File

@ -1056,13 +1056,12 @@ wait4child( int sig )
int save_errno = errno;
#ifdef WNOHANG
errno = 0;
do
errno = 0;
#ifdef HAVE_WAITPID
while ( waitpid( (pid_t)-1, NULL, WNOHANG ) > 0 || errno == EINTR )
; /* NULL */
while ( waitpid( (pid_t)-1, NULL, WNOHANG ) > 0 || errno == EINTR );
#else
while ( wait3( NULL, WNOHANG, NULL ) > 0 || errno == EINTR )
; /* NULL */
while ( wait3( NULL, WNOHANG, NULL ) > 0 || errno == EINTR );
#endif
#else
(void) wait( NULL );
@ -1072,4 +1071,3 @@ wait4child( int sig )
}
#endif /* LDAP_SIGCHLD */