mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-23 22:47:12 +01:00
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
This commit is contained in:
parent
6d661d1bc0
commit
765530421e
3 changed files with 11 additions and 5 deletions
|
@ -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.");
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue