From 90be9f6501860a22f694ef1659bef4d9182154e8 Mon Sep 17 00:00:00 2001 From: James Turner Date: Wed, 9 Apr 2014 21:36:45 -0400 Subject: Make sure zombie processes are left over --- pop3d.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pop3d.c b/pop3d.c index 77cbfa0..73656a8 100644 --- a/pop3d.c +++ b/pop3d.c @@ -203,8 +203,9 @@ sig_handler(int sig, short event, void *arg) event_loopexit(NULL); break; case SIGCHLD: - if (waitpid(pop3e_pid, &status, WNOHANG) > 0) - if (WIFEXITED(status) || WIFSIGNALED(status)) { + if (waitpid(WAIT_ANY, &status, WNOHANG) > 0) + if ((WIFEXITED(status) && WEXITSTATUS(status) != 0) || + WIFSIGNALED(status)) { logit(LOG_ERR, "Lost pop3 engine"); event_loopexit(NULL); } -- cgit v1.2.3 From e7d2df8c667cf50c80631c1faa1a7e98ffb55de6 Mon Sep 17 00:00:00 2001 From: Sunil Nimmagadda Date: Thu, 10 Apr 2014 18:15:20 +0500 Subject: Since we now waitpid on WAIT_ANY, pop3_main needed return pid. --- pop3d.c | 3 +-- pop3d.h | 2 +- pop3e.c | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/pop3d.c b/pop3d.c index 73656a8..2c7e27a 100644 --- a/pop3d.c +++ b/pop3d.c @@ -47,7 +47,6 @@ static enum m_type m_type(const char *); static void usage(void); static struct imsgev iev_pop3e; -static pid_t pop3e_pid; static const char *mpath = MBOX_PATH; static int mtype = M_MBOX; @@ -99,7 +98,7 @@ main(int argc, char *argv[]) if ((pw = getpwnam(POP3D_USER)) == NULL) fatalx("main: getpwnam " POP3D_USER); - pop3e_pid = pop3_main(pair, pw); + pop3_main(pair, pw); close(pair[1]); setproctitle("[priv]"); logit(LOG_INFO, "pop3d ready; type:%s, path:%s", mtype_str, mpath); diff --git a/pop3d.h b/pop3d.h index 5697dbb..d2b29d0 100644 --- a/pop3d.h +++ b/pop3d.h @@ -144,7 +144,7 @@ struct session { }; /* pop3e.c */ -pid_t pop3_main(int [2], struct passwd *); +void pop3_main(int [2], struct passwd *); /* session.c */ void session_init(struct listener *, int); diff --git a/pop3e.c b/pop3e.c index cb6f017..728df72 100644 --- a/pop3e.c +++ b/pop3e.c @@ -47,7 +47,7 @@ static void sig_handler(int, short, void *); struct imsgev iev_pop3d; void *ssl_ctx; -pid_t +void pop3_main(int pair[2], struct passwd *pw) { extern struct session_tree sessions; @@ -59,7 +59,7 @@ pop3_main(int pair[2], struct passwd *pw) fatal("pop3e: fork"); if (pid > 0) - return (pid); + return; close(pair[0]); setproctitle("pop3 engine"); -- cgit v1.2.3