fix an infinite loop; answer a question

svn:r6316
This commit is contained in:
Nick Mathewson 2006-04-07 22:55:46 +00:00
parent c6d010b218
commit 7a804572ab

View File

@ -2408,13 +2408,17 @@ update_networkstatus_client_downloads(time_t now)
if (fetch_latest) {
int i;
for (i = most_recent_idx + 1; i; ++i) {
int n_failed = 0;
for (i = most_recent_idx + 1; 1; ++i) {
trusted_dir_server_t *ds;
if (i >= n_dirservers)
i = 0;
ds = smartlist_get(trusted_dir_servers, i);
if (ds->n_networkstatus_failures > NETWORKSTATUS_N_ALLOWABLE_FAILURES)
if (n_failed < n_dirservers &&
ds->n_networkstatus_failures > NETWORKSTATUS_N_ALLOWABLE_FAILURES) {
++n_failed;
continue;
}
smartlist_add(missing, ds->digest);
break;
}
@ -3579,7 +3583,11 @@ router_have_minimum_dir_info(void)
num_running++;
});
/* XXX if more than 3/4 of the routers in the network are down
* or invalid, does this mean we'll never become happy? -RD */
* or invalid, does this mean we'll never become happy? -RD
* Right. We should base the required fraction on the number of
* routers we would like to download if we could. I think right now we
* only decline to download non-running routers, but we might want
* to split out the test so we can keep these in sync. -NM */
res = smartlist_len(routerlist->routers) >= (avg/4) && num_running > 2;
done:
if (res && !have_enough) {