struct rspamd_main *rspamd_main;
rspamd_main = w->srv;
- kill (w->pid, SIGUSR2);
- msg_info_main ("send signal to worker %P", w->pid);
+
+ if (!w->wanna_die) {
+ w->wanna_die = TRUE;
+ kill (w->pid, SIGUSR2);
+ msg_info_main ("send signal to worker %P", w->pid);
+ }
+ else {
+ msg_info_main ("do not send signal to worker %P, already sent", w->pid);
+ }
}
static gboolean
g_hash_table_remove (rspamd_main->workers, GSIZE_TO_POINTER (
wrk));
+ if (cur->wanna_die) {
+ /* Do not refork workers that are intended to be terminated */
+ need_refork = FALSE;
+ }
+
if (WIFEXITED (res) && WEXITSTATUS (res) == 0) {
/* Normal worker termination, do not fork one more */
msg_info_main ("%s process %P terminated normally",