summaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
Diffstat (limited to 'src/or')
-rw-r--r--src/or/circuitbuild.c2
-rw-r--r--src/or/circuitlist.c9
-rw-r--r--src/or/networkstatus.c8
3 files changed, 13 insertions, 6 deletions
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index b1de024168..adf53a8b10 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -643,6 +643,8 @@ circuit_build_times_count_pretimeouts(circuit_build_times_t *cbt)
double timeout_quantile = 1.0-
((double)cbt->pre_timeouts)/
(cbt->pre_timeouts+cbt->total_build_times);
+ /* Make sure it doesn't exceed the synthetic max */
+ timeout_quantile *= MAX_SYNTHETIC_QUANTILE;
cbt->Xm = circuit_build_times_mode(cbt);
tor_assert(cbt->Xm > 0);
/* Use current timeout to get an estimate on alpha */
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index 259666732a..560bec55f1 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -367,10 +367,11 @@ circuit_purpose_to_controller_string(uint8_t purpose)
int32_t
circuit_initial_package_window(void)
{
- networkstatus_t *consensus = networkstatus_get_latest_consensus();
- if (consensus)
- return networkstatus_get_param(consensus, "circwindow", CIRCWINDOW_START);
- return CIRCWINDOW_START;
+ int32_t num = networkstatus_get_param(NULL, "circwindow", CIRCWINDOW_START);
+ /* If the consensus tells us a negative number, we'd assert. */
+ if (num < 0)
+ num = CIRCWINDOW_START;
+ return num;
}
/** Initialize the common elements in a circuit_t, and add it to the global
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index fd38df4e68..5d1f8b24a3 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -1894,14 +1894,18 @@ networkstatus_dump_bridge_status_to_file(time_t now)
}
/** Return the value of a integer parameter from the networkstatus <b>ns</b>
- * whose name is <b>param_name</b>. Return <b>default_val</b> if ns is NULL,
- * or if it has no parameter called <b>param_name</b>. */
+ * whose name is <b>param_name</b>. If <b>ns</b> is NULL, try loading the
+ * latest consensus ourselves. Return <b>default_val</b> if no latest
+ * consensus, or if it has no parameter called <b>param_name</b>. */
int32_t
networkstatus_get_param(networkstatus_t *ns, const char *param_name,
int32_t default_val)
{
size_t name_len;
+ if (!ns) /* if they pass in null, go find it ourselves */
+ ns = networkstatus_get_latest_consensus();
+
if (!ns || !ns->net_params)
return default_val;