From: Mike Perry Date: Wed, 29 Sep 2010 15:47:35 +0000 (-0700) Subject: Fix state checks on liveness handling. X-Git-Tag: tor-0.2.2.17-alpha~9^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0744a175afa559435bd0e3cdb53891282469e0ee;p=thirdparty%2Ftor.git Fix state checks on liveness handling. If we really want all this complexity for these stages here, we need to handle it better for people with large timeouts. It should probably go away, though. --- diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 4f4d9c70d2..81b63fe64d 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -1034,17 +1034,25 @@ circuit_build_times_network_check_live(circuit_build_times_t *cbt) return 0; } else if (cbt->liveness.nonlive_timeouts >= CBT_NETWORK_NONLIVE_TIMEOUT_COUNT) { - // XXX: We won't ever conclude the network is flaky here for poor arma... - if (cbt->timeout_ms < circuit_build_times_get_initial_timeout()) { + if (cbt->liveness.suspended_timeout <= 0) { + cbt->liveness.suspended_timeout = cbt->timeout_ms; + cbt->liveness.suspended_close_timeout = cbt->close_ms; + + if (cbt->timeout_ms < circuit_build_times_get_initial_timeout()) + cbt->timeout_ms = circuit_build_times_get_initial_timeout(); + else + cbt->timeout_ms *= 2; + + if (cbt->close_ms < circuit_build_times_get_initial_timeout()) + cbt->close_ms = circuit_build_times_get_initial_timeout(); + else + cbt->close_ms *= 2; + log_notice(LD_CIRC, "Network is flaky. No activity for %ld seconds. " "Temporarily raising timeout to %lds.", (long int)(now - cbt->liveness.network_last_live), - tor_lround(circuit_build_times_get_initial_timeout()/1000)); - cbt->liveness.suspended_timeout = cbt->timeout_ms; - cbt->liveness.suspended_close_timeout = cbt->close_ms; - cbt->close_ms = cbt->timeout_ms - = circuit_build_times_get_initial_timeout(); + tor_lround(cbt->timeout_ms/1000)); control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_SUSPENDED); }