X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Fretry.c;h=5126e5344d4b889c564d0a448c14bf5d54b67177;hb=1921d2ea1648c90d45da23f26cf8855465521426;hp=2e743a793532e8bcb11c966c4ef4b1c06dfcb18e;hpb=fffffe4c6b130334b949927ccdc0a36a7d880024;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/retry.c b/src/src/retry.c index 2e743a793..5126e5344 100644 --- a/src/src/retry.c +++ b/src/src/retry.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/retry.c,v 1.3 2005/06/29 14:17:01 ph10 Exp $ */ +/* $Cambridge: exim/src/src/retry.c,v 1.4 2005/09/19 11:56:11 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -739,15 +739,24 @@ for (i = 0; i < 3; i++) if (rule == NULL) next_try = now; else { if (rule->rule == 'F') next_try = now + rule->p1; - else /* assume rule = 'G' */ + else /* rule = 'G' or 'H' */ { int last_predicted_gap = retry_record->next_try - retry_record->last_try; int last_actual_gap = now - retry_record->last_try; int lastgap = (last_predicted_gap < last_actual_gap)? last_predicted_gap : last_actual_gap; - next_try = now + ((lastgap < rule->p1)? rule->p1 : - (lastgap * rule->p2)/1000); + int next_gap = (lastgap * rule->p2)/1000; + if (rule->rule == 'G') + { + next_try = now + ((lastgap < rule->p1)? rule->p1 : next_gap); + } + else /* The 'H' rule */ + { + next_try = now + rule->p1; + if (next_gap > rule->p1) + next_try += random_number(next_gap - rule->p1); + } } }