From: Timo Sirainen Date: Mon, 2 Feb 2026 21:40:19 +0000 (+0200) Subject: lib-auth-client: auth-master - Fix panic when reconnecting after handshake timeout X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eabdfd7df9f2980e8829dbc8f883656130725441;p=thirdparty%2Fdovecot%2Fcore.git lib-auth-client: auth-master - Fix panic when reconnecting after handshake timeout The connection wasn't fully disconnected after handshake timeout. Fix this by moving connection_disconnect() to auth_master_connection_failure() so it always gets called. Fixes: Panic: file connection.c: line 797 (connection_client_connect_with_retries): assertion failed: (conn->fd_in == -1) --- diff --git a/src/lib-auth-client/auth-master.c b/src/lib-auth-client/auth-master.c index ea062f7d89..181d60ece5 100644 --- a/src/lib-auth-client/auth-master.c +++ b/src/lib-auth-client/auth-master.c @@ -101,6 +101,7 @@ auth_master_connection_failure(struct auth_master_connection *conn, if (conn->connected) e_debug(conn->conn.event, "%s", reason); + connection_disconnect(&conn->conn); conn->connected = FALSE; conn->sent_handshake = FALSE; @@ -136,7 +137,6 @@ auth_master_connection_abort_requests(struct auth_master_connection *conn) void auth_master_disconnect(struct auth_master_connection *conn) { - connection_disconnect(&conn->conn); auth_master_connection_failure(conn, NULL); } @@ -191,9 +191,6 @@ static void auth_master_destroy(struct connection *_conn) struct auth_master_connection *conn = container_of(_conn, struct auth_master_connection, conn); - if (conn->connected) - connection_disconnect(&conn->conn); - switch (_conn->disconnect_reason) { case CONNECTION_DISCONNECT_HANDSHAKE_FAILED: auth_master_connection_failure(