From: Stephan Bosch Date: Sat, 21 Jun 2025 14:34:03 +0000 (+0200) Subject: lib-smtp: smtp-client-transaction - Prevent logging a spurious abort event for an... X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=39deb9c502d0d83242b88c92f902314affce8f82;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: smtp-client-transaction - Prevent logging a spurious abort event for an approved recipient --- diff --git a/src/lib-smtp/smtp-client-private.h b/src/lib-smtp/smtp-client-private.h index 7d58c7875f..f226ac2ee8 100644 --- a/src/lib-smtp/smtp-client-private.h +++ b/src/lib-smtp/smtp-client-private.h @@ -91,6 +91,7 @@ struct smtp_client_transaction_rcpt { bool external_pool:1; bool queued:1; bool finished:1; + bool discarded:1; }; struct smtp_client_transaction { diff --git a/src/lib-smtp/smtp-client-transaction.c b/src/lib-smtp/smtp-client-transaction.c index 0112021f3c..eb5ed75ed7 100644 --- a/src/lib-smtp/smtp-client-transaction.c +++ b/src/lib-smtp/smtp-client-transaction.c @@ -223,7 +223,7 @@ smtp_client_transaction_rcpt_free( trans->rcpts_count--; } - if (!rcpt->finished) { + if (!rcpt->finished && !rcpt->discarded) { struct smtp_reply failure; trans->rcpts_aborted++; @@ -247,6 +247,19 @@ smtp_client_transaction_rcpt_free( } } +static void +smtp_client_transaction_rcpt_discard( + struct smtp_client_transaction_rcpt **_rcpt) +{ + struct smtp_client_transaction_rcpt *rcpt = *_rcpt; + + if (rcpt == NULL) + return; + + rcpt->discarded = TRUE; + smtp_client_transaction_rcpt_free(_rcpt); +} + static void smtp_client_transaction_rcpt_approved( struct smtp_client_transaction_rcpt **_rcpt) @@ -285,8 +298,8 @@ smtp_client_transaction_rcpt_approved( rcpt->event = prcpt->event; event_ref(rcpt->event); - /* Free the old object, thereby removing it from the queue */ - smtp_client_transaction_rcpt_free(&prcpt); + /* Discard the old object, thereby removing it from the queue */ + smtp_client_transaction_rcpt_discard(&prcpt); } /* Recipient is approved */