X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fsrc%2Fretry.c;h=8e4a3baa8de0a1fe1c786f3ce1ae681f4f71651e;hb=0ca0cf52fa9c635984937a3cc813d38fcdacd7ab;hp=ca61e5c0c0df1c2e74dabea665d52510341784bf;hpb=e97957bc478f60d32649b329659d4b72748745c1;p=exim.git diff --git a/src/src/retry.c b/src/src/retry.c index ca61e5c0c..8e4a3baa8 100644 --- a/src/src/retry.c +++ b/src/src/retry.c @@ -1,10 +1,10 @@ -/* $Cambridge: exim/src/src/retry.c,v 1.9 2006/03/09 15:10:16 ph10 Exp $ */ +/* $Cambridge: exim/src/src/retry.c,v 1.13 2009/11/16 19:50:37 nm4 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2006 */ +/* Copyright (c) University of Cambridge 1995 - 2009 */ /* See the file NOTICE for conditions of use and distribution. */ /* Functions concerned with retrying unsuccessful deliveries. */ @@ -47,9 +47,8 @@ if (retry != NULL && retry->rules != NULL) last_rule->next != NULL; last_rule = last_rule->next); DEBUG(D_transport|D_retry) - debug_printf("now=%d received_time=%d diff=%d timeout=%d\n", - (int)now, received_time, (int)(now - received_time), - last_rule->timeout); + debug_printf(" received_time=%d diff=%d timeout=%d\n", + received_time, (int)(now - received_time), last_rule->timeout); address_timeout = (now - received_time > last_rule->timeout); } else @@ -210,8 +209,14 @@ if (host_retry_record != NULL) if (now < host_retry_record->next_try && !deliver_force) { DEBUG(D_transport|D_retry) + { debug_printf("host retry time not reached: checking ultimate address " "timeout\n"); + debug_printf(" now=%d first_failed=%d next_try=%d expired=%d\n", + (int)now, (int)host_retry_record->first_failed, + (int)host_retry_record->next_try, + host_retry_record->expired); + } if (!host_retry_record->expired && ultimate_address_timeout(host_key, domain, @@ -247,8 +252,13 @@ if (message_retry_record != NULL) if (now < message_retry_record->next_try && !deliver_force) { DEBUG(D_transport|D_retry) + { debug_printf("host+message retry time not reached: checking ultimate " "address timeout\n"); + debug_printf(" now=%d first_failed=%d next_try=%d expired=%d\n", + (int)now, (int)message_retry_record->first_failed, + (int)message_retry_record->next_try, message_retry_record->expired); + } if (!ultimate_address_timeout(host_key, domain, 0, 0, now)) { host->status = hstatus_unusable; @@ -698,13 +708,14 @@ for (i = 0; i < 3; i++) DEBUG(D_retry) debug_printf("failing_interval=%d message_age=%d\n", failing_interval, message_age); - /* If the message has been on the queue longer than the recorded time - of failure, use the message's age instead. This can happen when some - messages can be delivered and others cannot; a successful delivery will - reset the first_failed time, and this can lead to a failing message - being retried too often. */ + /* For a non-host error, if the message has been on the queue longer + than the recorded time of failure, use the message's age instead. This + can happen when some messages can be delivered and others cannot; a + successful delivery will reset the first_failed time, and this can lead + to a failing message being retried too often. */ - if (message_age > failing_interval) failing_interval = message_age; + if ((rti->flags & rf_host) == 0 && message_age > failing_interval) + failing_interval = message_age; /* Search for the current retry rule. The cutoff time of the last rule is handled differently to the others. The rule continues