From: Stephan Bosch Date: Thu, 22 Apr 2021 10:32:38 +0000 (+0200) Subject: lib-smtp: smtp-client-connection - Abort all transactions upon smtp_client_connection... X-Git-Tag: 2.3.16~119 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0ef7144312d1c22d0e70b601a2e69c9d1fcd2efb;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: smtp-client-connection - Abort all transactions upon smtp_client_connection_close(). Before, these would get a disconnect failure, which makes no sense when the client is causing the disconnect. --- diff --git a/src/lib-smtp/smtp-client-connection.c b/src/lib-smtp/smtp-client-connection.c index 292d659cdd..ffa0f90e0d 100644 --- a/src/lib-smtp/smtp-client-connection.c +++ b/src/lib-smtp/smtp-client-connection.c @@ -155,6 +155,19 @@ smtp_client_connection_commands_fail(struct smtp_client_connection *conn, smtp_client_connection_commands_fail_reply(conn, &reply); } +static void +smtp_client_connection_transactions_abort(struct smtp_client_connection *conn) +{ + struct smtp_client_transaction *trans; + + trans = conn->transactions_head; + while (trans != NULL) { + struct smtp_client_transaction *trans_next = trans->next; + smtp_client_transaction_abort(trans); + trans = trans_next; + } +} + static void smtp_client_connection_login_callback(struct smtp_client_connection *conn, const struct smtp_reply *reply) @@ -2192,6 +2205,7 @@ void smtp_client_connection_close(struct smtp_client_connection **_conn) return; conn->closed = TRUE; + smtp_client_connection_transactions_abort(conn); smtp_client_connection_disconnect(conn); /* could have been created while already disconnected */