aboutsummaryrefslogtreecommitdiff
path: root/src/or/circuituse.c
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2008-10-15 00:36:09 +0000
committerRoger Dingledine <arma@torproject.org>2008-10-15 00:36:09 +0000
commit4520500cde57f940b68138e3a771f989afe8d60c (patch)
tree4d0e8f06bd03db4eedf455f5565691eb56b75c5c /src/or/circuituse.c
parentebf6591e6f23920ebc86fa370459b1aceddd2569 (diff)
downloadtor-4520500cde57f940b68138e3a771f989afe8d60c.tar
tor-4520500cde57f940b68138e3a771f989afe8d60c.tar.gz
put in karsten's patch #1 for proposal 155, modified
svn:r17106
Diffstat (limited to 'src/or/circuituse.c')
-rw-r--r--src/or/circuituse.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 467a19579..7da550888 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -251,11 +251,13 @@ void
circuit_expire_building(time_t now)
{
circuit_t *victim, *circ = global_circuitlist;
- time_t cutoff = now - get_options()->CircuitBuildTimeout;
- time_t begindir_cutoff = now - get_options()->CircuitBuildTimeout/2;
+ time_t general_cutoff = now - get_options()->CircuitBuildTimeout;
+ time_t begindir_cutoff = general_cutoff/2;
+ time_t introcirc_cutoff = general_cutoff/2;
cpath_build_state_t *build_state;
while (circ) {
+ time_t cutoff;
victim = circ;
circ = circ->next;
if (!CIRCUIT_IS_ORIGIN(victim) || /* didn't originate here */
@@ -263,13 +265,23 @@ circuit_expire_building(time_t now)
continue;
build_state = TO_ORIGIN_CIRCUIT(victim)->build_state;
- if (victim->timestamp_created >
- ((build_state && build_state->onehop_tunnel) ?
- begindir_cutoff : cutoff))
+ if (build_state && build_state->onehop_tunnel)
+ cutoff = begindir_cutoff;
+ else if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCING)
+ cutoff = introcirc_cutoff;
+ else
+ cutoff = general_cutoff;
+ if (victim->timestamp_created > cutoff)
continue; /* it's still young, leave it alone */
#if 0
/* some debug logs, to help track bugs */
+ if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCING &&
+ victim->timestamp_created <= introcirc_cutoff &&
+ victim->timestamp_created > general_cutoff)
+ log_info(LD_REND|LD_CIRC, "Timing out introduction circuit which we "
+ "would not have done if it had been a general circuit.");
+
if (victim->purpose >= CIRCUIT_PURPOSE_C_INTRODUCING &&
victim->purpose <= CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED) {
if (!victim->timestamp_dirty)