Merge remote branch 'mikeperry/bwweight-smartlistfix'

This commit is contained in:
Nick Mathewson 2010-03-04 00:13:23 -05:00
commit b3ec39af8f

View File

@ -1574,6 +1574,13 @@ smartlist_choose_by_bandwidth_weights(smartlist_t *sl,
rule == WEIGHT_FOR_MID || rule == WEIGHT_FOR_MID ||
rule == WEIGHT_FOR_DIR); rule == WEIGHT_FOR_DIR);
if (smartlist_len(sl) == 0) {
log_info(LD_CIRC,
"Empty routerlist passed in to consensus weight node "
"selection for rule %d", rule);
return NULL;
}
weight_scale = networkstatus_get_param(NULL, "bwweightscale", weight_scale = networkstatus_get_param(NULL, "bwweightscale",
BW_WEIGHT_SCALE); 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=%lf Wm=%lf We=%lf Wd=%lf with total bw %lf", rule,
Wg, Wm, We, Wd, weighted_bw); 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(DBL_TO_U64(weighted_bw));
rand_bw++; /* crypto_rand_uint64() counts from 0, and we need to count rand_bw++; /* crypto_rand_uint64() counts from 0, and we need to count
* from 1 below. See bug 1203 for details. */ * 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_EXIT ||
rule == WEIGHT_FOR_GUARD); rule == WEIGHT_FOR_GUARD);
if (smartlist_len(sl) == 0) {
log_info(LD_CIRC,
"Empty routerlist passed in to old node selection for rule %d",
rule);
return NULL;
}
/* First count the total bandwidth weight, and make a list /* First count the total bandwidth weight, and make a list
* of each value. <0 means "unknown; no routerinfo." We use the * of each value. <0 means "unknown; no routerinfo." We use the
* bits of negative values to remember whether the router was fast (-x)&1 * bits of negative values to remember whether the router was fast (-x)&1