]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-client-connection - Abort all transactions upon smtp_client_connection...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Thu, 22 Apr 2021 10:32:38 +0000 (12:32 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 21 May 2021 20:20:48 +0000 (20:20 +0000)
Before, these would get a disconnect failure, which makes no sense when the
client is causing the disconnect.

src/lib-smtp/smtp-client-connection.c

index 292d659cdde0d5ac3d5d544558832a1c9a79a8f2..ffa0f90e0da9980b6cad500159dc439f97f7c2d1 100644 (file)
@@ -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 */