summaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2020-03-28 16:37:50 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2020-03-28 16:37:50 +0000
commit192c6b791d1c2b42861df6526c663f1d0814ee84 (patch)
treeed75147db4aa301befe8bc510911e67998a0dcdc /src/libserver
parent0e1e5111e3aea32e6e001c0b55d43493bac04738 (diff)
downloadrspamd-192c6b791d1c2b42861df6526c663f1d0814ee84.tar.gz
rspamd-192c6b791d1c2b42861df6526c663f1d0814ee84.zip
[Minor] Try harder to avoid races on child termination
Diffstat (limited to 'src/libserver')
-rw-r--r--src/libserver/rspamd_control.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/libserver/rspamd_control.c b/src/libserver/rspamd_control.c
index 30d959e47..0dc04d291 100644
--- a/src/libserver/rspamd_control.c
+++ b/src/libserver/rspamd_control.c
@@ -427,6 +427,7 @@ rspamd_control_broadcast_cmd (struct rspamd_main *rspamd_main,
while (g_hash_table_iter_next (&it, &k, &v)) {
wrk = v;
+ /* No control pipe */
if (wrk->control_pipe[0] == -1) {
continue;
}
@@ -435,6 +436,11 @@ rspamd_control_broadcast_cmd (struct rspamd_main *rspamd_main,
continue;
}
+ /* Worker is terminating, do not bother sending stuff */
+ if (wrk->state == rspamd_worker_state_terminating) {
+ continue;
+ }
+
memset (&msg, 0, sizeof (msg));
/* Attach fd to the message */