From: Stephan Bosch Date: Sun, 14 Oct 2018 21:00:11 +0000 (+0200) Subject: submission: relay backend: Properly manage the trans_started flag. X-Git-Tag: 2.3.9~1202 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a357af3d502a4c825286e3791b2d450c703104bf;p=thirdparty%2Fdovecot%2Fcore.git submission: relay backend: Properly manage the trans_started flag. Sometimes it was not set at all. This didn't lead to problems in most cases, but this was at least confusing while debugging. Also, the flag is set before the client transaction is actually started, making sure (future) recursive problems will not occur. --- diff --git a/src/submission/submission-backend-relay.c b/src/submission/submission-backend-relay.c index a2a1deeaa0..c1bb8f6339 100644 --- a/src/submission/submission-backend-relay.c +++ b/src/submission/submission-backend-relay.c @@ -117,6 +117,7 @@ backend_relay_trans_start(struct submission_backend *_backend, (struct submission_backend_relay *)_backend; if (backend->trans == NULL) { + backend->trans_started = TRUE; backend->trans = smtp_client_transaction_create( backend->conn, trans->mail_from, &trans->params, backend_relay_trans_finished, backend); @@ -125,6 +126,7 @@ backend_relay_trans_start(struct submission_backend *_backend, backend->trans, backend_relay_trans_start_callback, backend); } else if (!backend->trans_started) { + backend->trans_started = TRUE; smtp_client_transaction_start_empty( backend->trans, trans->mail_from, &trans->params, backend_relay_trans_start_callback, backend); @@ -142,6 +144,7 @@ backend_relay_trans_free(struct submission_backend *_backend, return; smtp_client_transaction_destroy(&backend->trans); + backend->trans_started = FALSE; } /* @@ -404,13 +407,13 @@ backend_relay_cmd_mail(struct submission_backend *_backend, if (backend->trans == NULL) { /* start client transaction */ + backend->trans_started = TRUE; backend->trans = smtp_client_transaction_create( backend->conn, data->path, &data->params, backend_relay_trans_finished, backend); smtp_client_transaction_set_immediate(backend->trans, TRUE); smtp_client_transaction_start(backend->trans, relay_cmd_mail_callback, mail_cmd); - backend->trans_started = TRUE; } else { /* forward pipelined MAIL command */ i_assert(backend->trans_started);