diff options
author | Roger Dingledine <arma@torproject.org> | 2010-03-03 22:36:47 -0500 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2010-03-03 22:36:47 -0500 |
commit | 82a5ef1f7f20ba256eae71e90b83b19500142ebb (patch) | |
tree | 2612c98f5209cfda61000230b14a6cca237acf19 | |
parent | 9d3a985a83f358677139c6ac0b6ec32eaaaaf0a3 (diff) | |
parent | 97eec84f4bcc4908e47ebcb51f1eb1d3a782b42b (diff) | |
download | tor-82a5ef1f7f20ba256eae71e90b83b19500142ebb.tar.gz tor-82a5ef1f7f20ba256eae71e90b83b19500142ebb.zip |
Merge commit 'mikeperry/bwweight-smartlistfix'
-rw-r--r-- | src/or/routerlist.c | 23 |
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 |