diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 0840e304f1489d86cc7a8af9ff15670fea548a7e..3600ce7c4d113d52ecff7890b6b4a9d339c56c0f 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -922,17 +922,18 @@ circuit_build_times_network_check_live(circuit_build_times_t *cbt) "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->timeout_ms = circuit_build_times_get_initial_timeout(); - cbt->liveness.net_suspended = 1; control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_SUSPENDED); } return 0; - } else if (cbt->liveness.net_suspended) { + } else if (cbt->liveness.suspended_timeout) { log_notice(LD_CIRC, "Network activity has resumed. " "Resuming circuit timeout calculations."); - cbt->liveness.net_suspended = 0; + cbt->timeout_ms = cbt->liveness.suspended_timeout; + cbt->liveness.suspended_timeout = 0; control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_RESUME); } diff --git a/src/or/or.h b/src/or/or.h index c8886cff1e2e6372efbc75e89a41c8bd0a05df6f..f31847408e0a10f9b13921646717a8cc0f1d1305 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -3108,8 +3108,9 @@ typedef struct { int num_recent_circs; /** Index into circular array. */ int after_firsthop_idx; - /** The network is not live. Timeout gathering is suspended */ - int net_suspended; + /** Timeout gathering is suspended if non-zero. The old timeout value + * is stored here in that case. */ + build_time_t suspended_timeout; } network_liveness_t; /** Structure for circuit build times history */