X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/c95da96a0c51c66c8cb2eff97b768a717d9e0c79..31f440e68b1a087093f1c34be1ad3444f911d7d9:/socket.c diff --git a/socket.c b/socket.c index 790a86d9..98093fcf 100644 --- a/socket.c +++ b/socket.c @@ -120,8 +120,6 @@ void start_accept_loop(int port, int (*fn)(int )) { int s; - signal(SIGCHLD, SIG_IGN); - /* open an incoming socket */ s = open_socket_in(SOCK_STREAM, port); if (s == -1) @@ -155,6 +153,15 @@ void start_accept_loop(int port, int (*fn)(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 + waitpid(-1, NULL, WNOHANG); +#endif + if (fork()==0) { close(s);