From: Stephan Bosch Date: Sun, 30 Sep 2018 21:56:57 +0000 (+0200) Subject: lib-smtp: client: transaction: Move initiation of command submission to a central... X-Git-Tag: 2.3.9~1253 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=dee73f5359853d9ccc2d07d7a8ba1a5309de2fb9;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: client: transaction: Move initiation of command submission to a central position. --- diff --git a/src/lib-smtp/smtp-client-transaction.c b/src/lib-smtp/smtp-client-transaction.c index 637ade8d0e..9babcc9908 100644 --- a/src/lib-smtp/smtp-client-transaction.c +++ b/src/lib-smtp/smtp-client-transaction.c @@ -29,6 +29,10 @@ const char *const smtp_client_transaction_state_names[] = { static void smtp_client_transaction_submit_more(struct smtp_client_transaction *trans); +static void +smtp_client_transaction_submit(struct smtp_client_transaction *trans, + bool start); + static void smtp_client_transaction_try_complete(struct smtp_client_transaction *trans); @@ -607,12 +611,7 @@ void smtp_client_transaction_add_rcpt( rcpt->data_callback = data_callback; rcpt->context = context; - if (trans->to_send == NULL && - (trans->state > SMTP_CLIENT_TRANSACTION_STATE_PENDING || - trans->failure != NULL)) { - trans->to_send = timeout_add_short(0, - smtp_client_transaction_submit_more, trans); - } + smtp_client_transaction_submit(trans, FALSE); } static void @@ -722,10 +721,7 @@ void smtp_client_transaction_send( smtp_client_transaction_timeout, trans); } - if (trans->to_send == NULL) { - trans->to_send = timeout_add_short(0, - smtp_client_transaction_submit_more, trans); - } + smtp_client_transaction_submit(trans, TRUE); } static void @@ -788,6 +784,24 @@ smtp_client_transaction_submit_more(struct smtp_client_transaction *trans) smtp_client_transaction_send_data(trans); } +static void +smtp_client_transaction_submit(struct smtp_client_transaction *trans, + bool start) +{ + if (trans->failure == NULL && !start && + trans->state <= SMTP_CLIENT_TRANSACTION_STATE_PENDING) { + /* Cannot submit commands at this time */ + return; + } + if (trans->to_send != NULL) { + /* Already scheduled command submission */ + return; + } + + trans->to_send = timeout_add_short(0, + smtp_client_transaction_submit_more, trans); +} + static void smtp_client_transaction_try_complete(struct smtp_client_transaction *trans) {