Commit ca20c7fd authored by Wayne Davison's avatar Wayne Davison

Instead of ignoring SIG_CHLD, reap zombies in the signal handler.

parent 191e40da
......@@ -374,6 +374,14 @@ int is_a_socket(int fd)
}
static RETSIGTYPE sigchld_handler(int UNUSED(val)) {
signal(SIGCHLD, sigchld_handler);
#ifdef WNOHANG
while (waitpid(-1, NULL, WNOHANG) > 0) {}
#endif
}
void start_accept_loop(int port, int (*fn)(int, int))
{
int s;
......@@ -419,14 +427,7 @@ void start_accept_loop(int port, int (*fn)(int, int))
if (fd == -1) continue;
signal(SIGCHLD, SIG_IGN);
/* we shouldn't have any children left hanging around
but I have had reports that on Digital Unix zombies
are produced, so this ensures that they are reaped */
#ifdef WNOHANG
while (waitpid(-1, NULL, WNOHANG) > 0);
#endif
signal(SIGCHLD, sigchld_handler);
if ((pid = fork()) == 0) {
int ret;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment