From: Timo Sirainen Date: Tue, 2 Mar 2021 14:37:30 +0000 (+0200) Subject: lmtp: Simplify/clarify disconnection code flow X-Git-Tag: 2.3.15~278 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=578708f67d45a8ebf7ba753532766a395762b207;p=thirdparty%2Fdovecot%2Fcore.git lmtp: Simplify/clarify disconnection code flow This is similar to the earlier submission commit. --- diff --git a/src/lmtp/lmtp-client.c b/src/lmtp/lmtp-client.c index c55e4f7801..196ee6d945 100644 --- a/src/lmtp/lmtp-client.c +++ b/src/lmtp/lmtp-client.c @@ -264,8 +264,10 @@ client_default_destroy(struct client *client, const char *enh_code, return; client->destroyed = TRUE; - client_disconnect(client, enh_code, reason); - + if (client->conn != NULL) { + smtp_server_connection_terminate(&client->conn, + (enh_code == NULL ? "4.0.0" : enh_code), reason); + } clients_count--; DLLIST_REMOVE(&clients, client); @@ -280,26 +282,6 @@ client_default_destroy(struct client *client, const char *enh_code, master_service_client_connection_destroyed(master_service); } -void client_disconnect(struct client *client, const char *enh_code, - const char *reason) -{ - struct smtp_server_connection *conn = client->conn; - - if (client->disconnected) - return; - client->disconnected = TRUE; - - if (reason == NULL) - reason = "Connection closed"; - e_info(client->event, "Disconnect from %s: %s", - client_remote_id(client), reason); - - if (conn != NULL) { - smtp_server_connection_terminate( - &conn, (enh_code == NULL ? "4.0.0" : enh_code), reason); - } -} - static void client_connection_trans_start(void *context, struct smtp_server_transaction *trans) @@ -375,7 +357,14 @@ static void client_connection_disconnect(void *context, const char *reason) { struct client *client = (struct client *)context; - client_disconnect(client, NULL, reason); + if (client->disconnected) + return; + client->disconnected = TRUE; + + if (reason == NULL) + reason = "Connection closed"; + e_info(client->event, "Disconnect from %s: %s", + client_remote_id(client), reason); } static void client_connection_free(void *context) diff --git a/src/lmtp/lmtp-client.h b/src/lmtp/lmtp-client.h index 175a5ec17b..b3c463dd90 100644 --- a/src/lmtp/lmtp-client.h +++ b/src/lmtp/lmtp-client.h @@ -116,8 +116,6 @@ struct client *client_create(int fd_in, int fd_out, const struct master_service_connection *conn); void client_destroy(struct client *client, const char *enh_code, const char *reason) ATTR_NULL(2, 3); -void client_disconnect(struct client *client, const char *enh_code, - const char *reason) ATTR_NULL(2, 3); void client_state_reset(struct client *client); void client_update_data_state(struct client *client, const char *new_args);