trans->rcpts_count--;
}
- if (!rcpt->finished) {
+ if (!rcpt->finished && !rcpt->discarded) {
struct smtp_reply failure;
trans->rcpts_aborted++;
}
}
+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)
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 */