commit 0b05962: [Minor] Reduce race condition probability

Vsevolod Stakhov vsevolod at highsecure.ru
Mon Sep 2 12:21:04 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-09-02 13:18:33 +0100
URL: https://github.com/rspamd/rspamd/commit/0b059629d7bb65c8ab4101c4b8d50156c03716d7 (HEAD -> master)

[Minor] Reduce race condition probability

---
 src/libserver/rspamd_control.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/libserver/rspamd_control.c b/src/libserver/rspamd_control.c
index 59d1e4234..6c558629c 100644
--- a/src/libserver/rspamd_control.c
+++ b/src/libserver/rspamd_control.c
@@ -35,6 +35,7 @@ struct rspamd_control_session;
 struct rspamd_control_reply_elt {
 	struct rspamd_control_reply reply;
 	struct rspamd_io_ev ev;
+	struct ev_loop *event_loop;
 	struct rspamd_worker *wrk;
 	gpointer ud;
 	gint attached_fd;
@@ -428,9 +429,9 @@ rspamd_control_broadcast_cmd (struct rspamd_main *rspamd_main,
 		r = sendmsg (wrk->control_pipe[0], &msg, 0);
 
 		if (r == sizeof (*cmd)) {
-
 			rep_elt = g_malloc0 (sizeof (*rep_elt));
 			rep_elt->wrk = wrk;
+			rep_elt->event_loop = rspamd_main->event_loop;
 			rep_elt->ud = ud;
 			rspamd_ev_watcher_init (&rep_elt->ev,
 					wrk->control_pipe[0],
@@ -720,7 +721,7 @@ struct rspamd_srv_reply_data {
 };
 
 static void
-rspamd_control_hs_io_handler (int fd, short what, void *ud)
+rspamd_control_ignore_io_handler (int fd, short what, void *ud)
 {
 	struct rspamd_control_reply_elt *elt =
 			(struct rspamd_control_reply_elt *)ud;
@@ -728,7 +729,7 @@ rspamd_control_hs_io_handler (int fd, short what, void *ud)
 
 	/* At this point we just ignore replies from the workers */
 	(void)read (fd, &rep, sizeof (rep));
-	rspamd_ev_watcher_stop (elt->wrk->srv->event_loop, &elt->ev);
+	rspamd_ev_watcher_stop (elt->event_loop, &elt->ev);
 	g_free (elt);
 }
 
@@ -741,7 +742,7 @@ rspamd_control_log_pipe_io_handler (int fd, short what, void *ud)
 
 	/* At this point we just ignore replies from the workers */
 	(void) read (fd, &rep, sizeof (rep));
-	rspamd_ev_watcher_stop (elt->wrk->srv->event_loop, &elt->ev);
+	rspamd_ev_watcher_stop (elt->event_loop, &elt->ev);
 	g_free (elt);
 }
 
@@ -886,7 +887,7 @@ rspamd_srv_handler (EV_P_ ev_io *w, int revents)
 						sizeof (wcmd.cmd.hs_loaded.cache_dir));
 				wcmd.cmd.hs_loaded.forced = cmd.cmd.hs_loaded.forced;
 				rspamd_control_broadcast_cmd (srv, &wcmd, rfd,
-						rspamd_control_hs_io_handler, NULL);
+						rspamd_control_ignore_io_handler, NULL);
 				break;
 			case RSPAMD_SRV_MONITORED_CHANGE:
 				/* Broadcast command to all workers */
@@ -898,7 +899,7 @@ rspamd_srv_handler (EV_P_ ev_io *w, int revents)
 				wcmd.cmd.monitored_change.alive = cmd.cmd.monitored_change.alive;
 				wcmd.cmd.monitored_change.sender = cmd.cmd.monitored_change.sender;
 				rspamd_control_broadcast_cmd (srv, &wcmd, rfd,
-						rspamd_control_hs_io_handler, NULL);
+						rspamd_control_ignore_io_handler, NULL);
 				break;
 			case RSPAMD_SRV_LOG_PIPE:
 				memset (&wcmd, 0, sizeof (wcmd));


More information about the Commits mailing list