diff options
Diffstat (limited to 'mail/dbmail20/files/patch-2.0.4_bug199_server.c')
-rw-r--r-- | mail/dbmail20/files/patch-2.0.4_bug199_server.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/mail/dbmail20/files/patch-2.0.4_bug199_server.c b/mail/dbmail20/files/patch-2.0.4_bug199_server.c new file mode 100644 index 000000000000..6786e6c8fc60 --- /dev/null +++ b/mail/dbmail20/files/patch-2.0.4_bug199_server.c @@ -0,0 +1,35 @@ +Index: server.c +=================================================================== +--- server.c (revision 1763) ++++ server.c (revision 1787) +@@ -69,7 +69,7 @@ + + act.sa_sigaction = ParentSigHandler; + sigemptyset(&act.sa_mask); +- act.sa_flags = SA_SIGINFO; ++ act.sa_flags = SA_SIGINFO | SA_NOCLDSTOP; + + sigaction(SIGCHLD, &act, 0); + sigaction(SIGINT, &act, 0); +@@ -152,6 +152,7 @@ + + void ParentSigHandler(int sig, siginfo_t * info, void *data) + { ++ pid_t chpid; + int saved_errno = errno; + + if (ParentPID != getpid()) { +@@ -175,7 +176,12 @@ + break; + + case SIGCHLD: +- break; /* ignore, wait for child in main loop */ ++ /* ignore, wait for child in main loop */ ++ /* but we need to catch zombie */ ++ if ((chpid = waitpid(-1,&sig,WNOHANG)) > 0) ++ scoreboard_release(chpid); ++ ++ break; + + case SIGHUP: + trace(TRACE_DEBUG, |