Browse Source

If our create-fast cell is mysteriously never answered for a begindir
attempt, notice more quickly. Some of our bootstrapping attempts have a 60
second delay while we sit there wondering why we're getting no response.


svn:r14162

Roger Dingledine 17 years ago
parent
commit
c26c77d24d
1 changed files with 7 additions and 1 deletions
  1. 7 1
      src/or/circuituse.c

+ 7 - 1
src/or/circuituse.c

@@ -210,15 +210,21 @@ 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;
+  cpath_build_state_t *build_state;
 
   while (circ) {
     victim = circ;
     circ = circ->next;
     if (!CIRCUIT_IS_ORIGIN(victim) || /* didn't originate here */
-        victim->timestamp_created > cutoff || /* Not old enough to expire */
         victim->marked_for_close) /* don't mess with marked circs */
       continue;
 
+    build_state = TO_ORIGIN_CIRCUIT(victim)->build_state;
+    if (victim->timestamp_created >
+        (build_state && build_state->onehop_tunnel) ? begindir_cutoff : 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 &&