diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 9bb456c3af..19b8eed850 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -1283,7 +1283,7 @@ smartlist_choose_by_bandwidth(smartlist_t *sl, int for_exit, int statuses) /* Last, count through sl until we get to the element we picked */ tmp = 0; - for (i=0; i < smartlist_len(sl) && tmp < rand_bw; i++) { + for (i=0; i < smartlist_len(sl); i++) { if (statuses) { status = smartlist_get(sl, i); is_exit = status->is_exit; @@ -1295,10 +1295,11 @@ smartlist_choose_by_bandwidth(smartlist_t *sl, int for_exit, int statuses) tmp += ((uint64_t)(bandwidths[i] * exit_weight)); else tmp += bandwidths[i]; + if (tmp >= rand_bw) + break; } - if (tmp < rand_bw) { + if (i == smartlist_len(sl)) { /* This is possible due to round-off error. */ - tor_assert(i == smartlist_len(sl)); --i; log_warn(LD_BUG, "Round-off error in computing bandwidth had an effect on " " which router we chose. Please tell the developers.");