Do not apply 'max_failures' to random-exponential schedules.

Fixes bug 20536; bugfix on 0.2.9.1-alpha.
This commit is contained in:
Nick Mathewson 2016-11-06 20:08:11 -05:00
parent e9ce181955
commit 5385a023e1
2 changed files with 15 additions and 3 deletions

6
changes/bug20536 Normal file
View File

@ -0,0 +1,6 @@
o Major bugfixes (download scheduling):
- When using an exponential backoff schedule, do not give up on
dowloading just because we have failed a bunch of times. Since
each delay is longer than the last, retrying indefinitely won't
hurt. Fixes bug 20536; bugfix on 0.2.9.1-alpha.

View File

@ -114,9 +114,15 @@ static inline int
download_status_is_ready(download_status_t *dls, time_t now,
int max_failures)
{
int under_failure_limit = (dls->n_download_failures <= max_failures
&& dls->n_download_attempts <= max_failures);
return (under_failure_limit && dls->next_attempt_at <= now);
if (dls->backoff == DL_SCHED_DETERMINISTIC) {
/* Deterministic schedules can hit an endpoint; exponential backoff
* schedules just wait longer and longer. */
int under_failure_limit = (dls->n_download_failures <= max_failures
&& dls->n_download_attempts <= max_failures);
if (!under_failure_limit)
return 0;
}
return dls->next_attempt_at <= now;
}
static void download_status_mark_impossible(download_status_t *dl);