]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
submission: relay backend: Properly manage the trans_started flag.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sun, 14 Oct 2018 21:00:11 +0000 (23:00 +0200)
committerStephan Bosch <stephan.bosch@dovecot.fi>
Mon, 15 Oct 2018 19:22:54 +0000 (21:22 +0200)
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.

src/submission/submission-backend-relay.c

index a2a1deeaa0895de3d2f5a5b3f984786ad8bf9e0a..c1bb8f633903e002da97760ec79851e5750221c6 100644 (file)
@@ -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);