From: Vsevolod Stakhov Date: Fri, 27 Nov 2015 15:02:46 +0000 (+0000) Subject: Fix forking and epoll/kqueue X-Git-Tag: 1.1.0~460 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=306d01b6fcf560a1905164e7f428c9989ac4e5fc;p=thirdparty%2Frspamd.git Fix forking and epoll/kqueue --- diff --git a/src/libserver/rspamd_control.c b/src/libserver/rspamd_control.c index 7eac7104a7..58147178f7 100644 --- a/src/libserver/rspamd_control.c +++ b/src/libserver/rspamd_control.c @@ -516,6 +516,13 @@ rspamd_srv_handler (gint fd, short what, gpointer ud) msg_err ("cannot read from worker's srv pipe: %s", strerror (errno)); } + else if (r == 0) { + /* + * Usually this means that a worker is dead, so do not try to read + * anything + */ + event_del (&worker->srv_ev); + } else if (r != sizeof (cmd)) { msg_err ("cannot read from worker's srv pipe incomplete command: %d", (gint) r); diff --git a/src/libserver/worker_util.c b/src/libserver/worker_util.c index c40c4f73f8..ef2b885789 100644 --- a/src/libserver/worker_util.c +++ b/src/libserver/worker_util.c @@ -469,6 +469,9 @@ rspamd_fork_worker (struct rspamd_main *rspamd_main, case 0: /* Update pid for logging */ rspamd_log_update_pid (cf->type, rspamd_main->logger); + /* Remove the inherited event base */ + event_reinit (rspamd_main->ev_base); + event_base_free (rspamd_main->ev_base); /* Lock statfile pool if possible XXX */ /* Init PRNG after fork */ rc = ottery_init (NULL);