From: Timo Sirainen Date: Fri, 7 Sep 2018 17:04:48 +0000 (+0300) Subject: doveadm: Make sure to stop running commands requiring synced ring when ring is no... X-Git-Tag: 2.3.4~180 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0c8cee931fe76d2899041e7feee0ebbeb15f72f6;p=thirdparty%2Fdovecot%2Fcore.git doveadm: Make sure to stop running commands requiring synced ring when ring is no longer synced A command could desync the ring, and no more commands should be run afterwards. This also fixes a bug where a command that desyncs the ring is supposed to wait for the ring being synced before returning OK, but returns it immediately instead. --- diff --git a/src/director/doveadm-connection.c b/src/director/doveadm-connection.c index 3a52109fb8..947a3af266 100644 --- a/src/director/doveadm-connection.c +++ b/src/director/doveadm-connection.c @@ -1166,9 +1166,10 @@ static void doveadm_connections_continue_reset_cmds(void) } } -void doveadm_connections_ring_synced(void) +void doveadm_connections_ring_synced(struct director *dir) { - while (doveadm_ring_sync_pending_connections != NULL) { + while (doveadm_ring_sync_pending_connections != NULL && + dir->ring_synced) { struct doveadm_connection *conn = doveadm_ring_sync_pending_connections; doveadm_connection_ring_sync_callback_t *callback = @@ -1180,5 +1181,6 @@ void doveadm_connections_ring_synced(void) io_set_pending(conn->io); callback(conn); } - doveadm_connections_continue_reset_cmds(); + if (dir->ring_synced) + doveadm_connections_continue_reset_cmds(); } diff --git a/src/director/doveadm-connection.h b/src/director/doveadm-connection.h index 0b55d85612..04904b617c 100644 --- a/src/director/doveadm-connection.h +++ b/src/director/doveadm-connection.h @@ -8,6 +8,6 @@ doveadm_connection_init(struct director *dir, int fd); void doveadm_connections_deinit(void); void doveadm_connections_kick_callback(struct director *dir); -void doveadm_connections_ring_synced(void); +void doveadm_connections_ring_synced(struct director *dir); #endif diff --git a/src/director/main.c b/src/director/main.c index 527351002e..eff0a12418 100644 --- a/src/director/main.c +++ b/src/director/main.c @@ -253,7 +253,7 @@ static void director_state_changed(struct director *dir) if (dir->to_request != NULL && array_count(&new_requests) == 0) timeout_remove(&dir->to_request); - doveadm_connections_ring_synced(); + doveadm_connections_ring_synced(dir); } static void main_preinit(void)