Skip to content

Commit

Permalink
director: Allow doveadm director ring remove for the same director
Browse files Browse the repository at this point in the history
Fixes:
Panic: file doveadm-connection.c: line 859 (doveadm_connection_cmd_run): assertion failed: (conn->dir->right == NULL && conn->dir->left == NULL)
  • Loading branch information
sirainen committed Oct 5, 2017
1 parent 868c94d commit d78b8d0
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions src/director/director.c
Expand Up @@ -535,19 +535,22 @@ void director_ring_remove(struct director_host *removed_host,
i_info("Removing director %s from ring (requested by %s)",
removed_host->name, src->name);

if (removed_host->self) {
if (removed_host->self && !src->self) {
/* others will just disconnect us */
return;
}

/* mark the host as removed and fully remove it later. this delay is
needed, because the removal may trigger director reconnections,
which may send the director back and we don't want to re-add it */
removed_host->removed = TRUE;
if (dir->to_remove_dirs == NULL) {
dir->to_remove_dirs =
timeout_add(DIRECTOR_DELAYED_DIR_REMOVE_MSECS,
director_delayed_dir_remove_timeout, dir);
if (!removed_host->self) {
/* mark the host as removed and fully remove it later. this
delay is needed, because the removal may trigger director
reconnections, which may send the director back and we don't
want to re-add it */
removed_host->removed = TRUE;
if (dir->to_remove_dirs == NULL) {
dir->to_remove_dirs =
timeout_add(DIRECTOR_DELAYED_DIR_REMOVE_MSECS,
director_delayed_dir_remove_timeout, dir);
}
}

/* if our left or ride side gets removed, notify them first
Expand All @@ -562,7 +565,8 @@ void director_ring_remove(struct director_host *removed_host,
conns = array_get(&dir->connections, &count);
for (i = 0; i < count; ) {
conn = conns[i];
if (director_connection_get_host(conn) != removed_host)
if (director_connection_get_host(conn) != removed_host ||
removed_host->self)
i++;
else {
director_connection_deinit(&conn, "Removing from ring");
Expand Down

0 comments on commit d78b8d0

Please sign in to comment.