diff options
Diffstat (limited to 'src/libserver/worker_util.c')
-rw-r--r-- | src/libserver/worker_util.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/src/libserver/worker_util.c b/src/libserver/worker_util.c index 883e7e8a9..163b0a509 100644 --- a/src/libserver/worker_util.c +++ b/src/libserver/worker_util.c @@ -761,23 +761,23 @@ rspamd_main_heartbeat_cb (EV_P_ ev_timer *w, int revents) -(wrk->hb.nbeats) >= rspamd_main->cfg->heartbeats_loss_max) { - if (-(wrk->hb.nbeats) >= rspamd_main->cfg->heartbeats_loss_max + 1) { - msg_err_main ("terminate worker type %s with pid %P, " - "last beat on: %s; %L heartbeat loast", + if (-(wrk->hb.nbeats) > rspamd_main->cfg->heartbeats_loss_max + 1) { + msg_err_main ("force kill worker type %s with pid %P, " + "last beat on: %s; %L heartbeat lost", g_quark_to_string (wrk->type), wrk->pid, timebuf, -(wrk->hb.nbeats)); - kill (wrk->pid, SIGTERM); + kill (wrk->pid, SIGKILL); } else { - msg_err_main ("force kill worker type %s with pid %P, " - "last beat on: %s; %L heartbeat loast", + msg_err_main ("terminate worker type %s with pid %P, " + "last beat on: %s; %L heartbeat lost", g_quark_to_string (wrk->type), wrk->pid, timebuf, -(wrk->hb.nbeats)); - kill (wrk->pid, SIGKILL); + kill (wrk->pid, SIGTERM); } } @@ -1363,10 +1363,21 @@ rspamd_check_termination_clause (struct rspamd_main *rspamd_main, if (WIFEXITED (res) && WEXITSTATUS (res) == 0) { /* Normal worker termination, do not fork one more */ - msg_info_main ("%s process %P terminated normally", - g_quark_to_string (wrk->type), - wrk->pid); - need_refork = FALSE; + + if (wrk->hb.nbeats < 0) { + msg_info_main ("%s process %P terminated normally, but lost %L " + "heartbeats, refork it", + g_quark_to_string (wrk->type), + wrk->pid, + -(wrk->hb.nbeats)); + need_refork = TRUE; + } + else { + msg_info_main ("%s process %P terminated normally", + g_quark_to_string (wrk->type), + wrk->pid); + need_refork = FALSE; + } } else { if (WIFSIGNALED (res)) { |