[tor-commits] [tor/release-0.3.2] Remove an erroneous 0.5 in compute_weighted_bandwidths()
nickm at torproject.org
nickm at torproject.org
Mon Nov 6 14:49:10 UTC 2017
commit 01e984870a7e1db2722e85fe43af7bcb4755c2d4
Author: Nick Mathewson <nickm at torproject.org>
Date: Fri Sep 22 15:29:15 2017 -0400
Remove an erroneous 0.5 in compute_weighted_bandwidths()
Back in 0.2.4.3-alpha (e106812a778f537), when we switched from using
double to using uint64 for selecting by bandwidth, I got the math
wrong: I should have used llround(x), or (uint64_t)(x+0.5), but
instead I wrote llround(x+0.5). That means we would always round
up, rather than rounding to the closest integer
Fixes bug 23318; bugfix on 0.2.4.3-alpha.
---
changes/bug23318 | 7 +++++++
src/or/routerlist.c | 2 +-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/changes/bug23318 b/changes/bug23318
new file mode 100644
index 000000000..32c85eb19
--- /dev/null
+++ b/changes/bug23318
@@ -0,0 +1,7 @@
+ o Minor bugfixes (path selection):
+ - When selecting relays by bandwidth, avoid a rounding error that
+ could sometimes cause load to be imbalanced incorrectly. Previously,
+ we would always round upwards; now, we round towards the nearest
+ integer. This had the biggest effect when a relay's weight adjustments
+ should have given it weight 0, but it got weight 1 instead.
+ Fixes bug 23318; bugfix on 0.2.4.3-alpha.
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 2365f28fd..faf2eeda5 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -2713,7 +2713,7 @@ compute_weighted_bandwidths(const smartlist_t *sl,
final_weight = weight*this_bw;
}
- bandwidths[node_sl_idx] = final_weight + 0.5;
+ bandwidths[node_sl_idx] = final_weight;
} SMARTLIST_FOREACH_END(node);
log_debug(LD_CIRC, "Generated weighted bandwidths for rule %s based "
More information about the tor-commits
mailing list