diff options
author | Roger Dingledine <arma@torproject.org> | 2004-08-18 08:51:04 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2004-08-18 08:51:04 +0000 |
commit | 765530421efe00f87a864a32fecbf88bffa90319 (patch) | |
tree | 613f9be11e5e76f665d3935de79056d186b2343c | |
parent | 6d661d1bc04755cb13b49a9587dc68b528cacfff (diff) | |
download | tor-765530421efe00f87a864a32fecbf88bffa90319.tar.gz tor-765530421efe00f87a864a32fecbf88bffa90319.zip |
be more aggressive about trying to make circuits:
try once a second for 30 seconds, and only when the entire previous
period has failed do we pause after MAX_CIRCUIT_FAILURES failures.
svn:r2281
-rw-r--r-- | src/or/circuitbuild.c | 2 | ||||
-rw-r--r-- | src/or/circuituse.c | 12 | ||||
-rw-r--r-- | src/or/or.h | 2 |
3 files changed, 11 insertions, 5 deletions
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index a5863cce17..fdd7d0d5c7 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -386,7 +386,7 @@ int circuit_send_next_onion_skin(circuit_t *circ) { /* done building the circuit. whew. */ circ->state = CIRCUIT_STATE_OPEN; log_fn(LOG_INFO,"circuit built!"); - circuit_reset_failure_count(); + circuit_reset_failure_count(0); if(!has_completed_circuit) { has_completed_circuit=1; log_fn(LOG_NOTICE,"Tor has successfully opened a circuit. Looks like it's working."); diff --git a/src/or/circuituse.c b/src/or/circuituse.c index 993ef2b18a..717f327b83 100644 --- a/src/or/circuituse.c +++ b/src/or/circuituse.c @@ -298,7 +298,7 @@ void circuit_build_needed_circs(time_t now) { circ = circuit_get_youngest_clean_open(CIRCUIT_PURPOSE_C_GENERAL); if(time_to_new_circuit < now) { - circuit_reset_failure_count(); + circuit_reset_failure_count(1); time_to_new_circuit = now + options.NewCircuitPeriod; if(proxy_mode()) client_dns_clean(); @@ -585,6 +585,7 @@ void circuit_build_failed(circuit_t *circ) { * circuit_launch_new and circuit_*_failure_count. */ static int n_circuit_failures = 0; +static int did_circs_fail_last_period = 0; /** Don't retry launching a new circuit if we try this many times with no * success. */ @@ -597,7 +598,8 @@ circuit_t *circuit_launch_by_identity(uint8_t purpose, const char *exit_digest) return NULL; } - if (n_circuit_failures > MAX_CIRCUIT_FAILURES) { + if (did_circs_fail_last_period && + n_circuit_failures > MAX_CIRCUIT_FAILURES) { /* too many failed circs in a row. don't try. */ // log_fn(LOG_INFO,"%d failures so far, not trying.",n_circuit_failures); return NULL; @@ -635,7 +637,11 @@ static void circuit_increment_failure_count(void) { * we will try MAX_CIRCUIT_FAILURES times more (if necessary) before * stopping again. */ -void circuit_reset_failure_count(void) { +void circuit_reset_failure_count(int timeout) { + if(timeout && n_circuit_failures > MAX_CIRCUIT_FAILURES) + did_circs_fail_last_period = 1; + else + did_circs_fail_last_period = 0; n_circuit_failures = 0; } diff --git a/src/or/or.h b/src/or/or.h index 5c2b153293..38f4899185 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -1003,7 +1003,7 @@ void circuit_has_opened(circuit_t *circ); void circuit_build_failed(circuit_t *circ); circuit_t *circuit_launch_by_nickname(uint8_t purpose, const char *exit_nickname); circuit_t *circuit_launch_by_identity(uint8_t purpose, const char *exit_digest); -void circuit_reset_failure_count(void); +void circuit_reset_failure_count(int timeout); int connection_ap_handshake_attach_circuit(connection_t *conn); int circuit_init_cpath_crypto(crypt_path_t *cpath, char *key_data,int reverse); |