mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-10-23 06:14:18 -04:00
Instead of ignoring SIG_CHLD, reap zombies in the signal handler.
This commit is contained in:
1 parent
191e40da17
commit
ca20c7fd62
1 file changed
+9
-8
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user