|
@@ -897,8 +897,10 @@ init_circuit_base(circuit_t *circ)
|
|
|
|
|
|
/** If we haven't yet decided on a good timeout value for circuit
|
|
|
* building, we close idle circuits aggressively so we can get more
|
|
|
- * data points. */
|
|
|
-#define IDLE_TIMEOUT_WHILE_LEARNING (1*60)
|
|
|
+ * data points. These are the default, min, and max consensus values */
|
|
|
+#define DFLT_IDLE_TIMEOUT_WHILE_LEARNING (3*60)
|
|
|
+#define MIN_IDLE_TIMEOUT_WHILE_LEARNING (10)
|
|
|
+#define MAX_IDLE_TIMEOUT_WHILE_LEARNING (1000*60)
|
|
|
|
|
|
/** Allocate space for a new circuit, initializing with <b>p_circ_id</b>
|
|
|
* and <b>p_conn</b>. Add it to the global circuit list.
|
|
@@ -931,7 +933,11 @@ origin_circuit_new(void)
|
|
|
circuit_build_times_needs_circuits(get_circuit_build_times())) {
|
|
|
/* Circuits should be shorter lived if we need more of them
|
|
|
* for learning a good build timeout */
|
|
|
- circ->circuit_idle_timeout = IDLE_TIMEOUT_WHILE_LEARNING;
|
|
|
+ circ->circuit_idle_timeout =
|
|
|
+ networkstatus_get_param(NULL, "cbtlearntimeout",
|
|
|
+ DFLT_IDLE_TIMEOUT_WHILE_LEARNING,
|
|
|
+ MIN_IDLE_TIMEOUT_WHILE_LEARNING,
|
|
|
+ MAX_IDLE_TIMEOUT_WHILE_LEARNING);
|
|
|
} else {
|
|
|
// This should always be larger than the current port prediction time
|
|
|
// remaining, or else we'll end up with the case where a circuit times out
|
|
@@ -951,7 +957,11 @@ origin_circuit_new(void)
|
|
|
"%d seconds of predictive building remaining.",
|
|
|
circ->circuit_idle_timeout,
|
|
|
prediction_time_remaining);
|
|
|
- circ->circuit_idle_timeout = IDLE_TIMEOUT_WHILE_LEARNING;
|
|
|
+ circ->circuit_idle_timeout =
|
|
|
+ networkstatus_get_param(NULL, "cbtlearntimeout",
|
|
|
+ DFLT_IDLE_TIMEOUT_WHILE_LEARNING,
|
|
|
+ MIN_IDLE_TIMEOUT_WHILE_LEARNING,
|
|
|
+ MAX_IDLE_TIMEOUT_WHILE_LEARNING);
|
|
|
}
|
|
|
|
|
|
log_info(LD_CIRC,
|