summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2010-03-03 22:36:47 -0500
committerRoger Dingledine <arma@torproject.org>2010-03-03 22:36:47 -0500
commit82a5ef1f7f20ba256eae71e90b83b19500142ebb (patch)
tree2612c98f5209cfda61000230b14a6cca237acf19
parent9d3a985a83f358677139c6ac0b6ec32eaaaaf0a3 (diff)
parent97eec84f4bcc4908e47ebcb51f1eb1d3a782b42b (diff)
downloadtor-82a5ef1f7f20ba256eae71e90b83b19500142ebb.tar.gz
tor-82a5ef1f7f20ba256eae71e90b83b19500142ebb.zip
Merge commit 'mikeperry/bwweight-smartlistfix'
-rw-r--r--src/or/routerlist.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index f0ae53abe0..69efd88791 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1574,6 +1574,13 @@ smartlist_choose_by_bandwidth_weights(smartlist_t *sl,
rule == WEIGHT_FOR_MID ||
rule == WEIGHT_FOR_DIR);
+ if (!sl || smartlist_len(sl) == 0) {
+ log_info(LD_CIRC,
+ "Empty routerlist passed in to node selection for rule %d",
+ rule);
+ return NULL;
+ }
+
weight_scale = networkstatus_get_param(NULL, "bwweightscale",
BW_WEIGHT_SCALE);
@@ -1692,6 +1699,15 @@ smartlist_choose_by_bandwidth_weights(smartlist_t *sl,
"Wg=%lf Wm=%lf We=%lf Wd=%lf with total bw %lf", rule,
Wg, Wm, We, Wd, weighted_bw);
+ /* If there is no bandwidth, choose at random */
+ if (DBL_TO_U64(weighted_bw) == 0) {
+ log_warn(LD_CIRC,
+ "Weighted bandwidth is %lf in node selection for rule %d",
+ weighted_bw, rule);
+ tor_free(bandwidths);
+ return smartlist_choose(sl);
+ }
+
rand_bw = crypto_rand_uint64(DBL_TO_U64(weighted_bw));
rand_bw++; /* crypto_rand_uint64() counts from 0, and we need to count
* from 1 below. See bug 1203 for details. */
@@ -1765,6 +1781,13 @@ smartlist_choose_by_bandwidth(smartlist_t *sl, bandwidth_weight_rule_t rule,
rule == WEIGHT_FOR_EXIT ||
rule == WEIGHT_FOR_GUARD);
+ if (!sl || smartlist_len(sl) == 0) {
+ log_warn(LD_CIRC,
+ "Empty routerlist passed in to node selection for rule %d",
+ rule);
+ return NULL;
+ }
+
/* First count the total bandwidth weight, and make a list
* of each value. <0 means "unknown; no routerinfo." We use the
* bits of negative values to remember whether the router was fast (-x)&1