Browse Source

Merge branch 'maint-0.3.2'

Nick Mathewson 6 years ago
parent
commit
04812e59df
2 changed files with 13 additions and 10 deletions
  1. 5 0
      changes/bug23681
  2. 8 10
      src/or/circuituse.c

+ 5 - 0
changes/bug23681

@@ -0,0 +1,5 @@
+  o Minor bugfixes (hidden service client):
+    - The introduction circuit was being timed out too quickly while waiting
+      for the rendezvous circuit to complete. Keep the intro circuit around
+      longer instead of timing out and reopening new ones constantly. Fixes
+      bug 23681; bugfix on 0.2.4.8-alpha.

+ 8 - 10
src/or/circuituse.c

@@ -543,8 +543,7 @@ circuit_expire_building(void)
       cutoff = begindir_cutoff;
     else if (victim->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT)
       cutoff = close_cutoff;
-    else if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCING ||
-             victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT)
+    else if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT)
       cutoff = c_intro_cutoff;
     else if (victim->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO)
       cutoff = s_intro_cutoff;
@@ -661,12 +660,13 @@ circuit_expire_building(void)
           TO_ORIGIN_CIRCUIT(victim)->path_state = PATH_STATE_USE_FAILED;
           break;
         case CIRCUIT_PURPOSE_C_INTRODUCING:
-          /* We keep old introducing circuits around for
-           * a while in parallel, and they can end up "opened".
-           * We decide below if we're going to mark them timed
-           * out and eventually close them.
-           */
-          break;
+          /* That purpose means that the intro point circuit has been opened
+           * succesfully but the INTRODUCE1 cell hasn't been sent yet because
+           * the client is waiting for the rendezvous point circuit to open.
+           * Keep this circuit open while waiting for the rendezvous circuit.
+           * We let the circuit idle timeout take care of cleaning this
+           * circuit if it never used. */
+          continue;
         case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
         case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED:
         case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT:
@@ -757,8 +757,6 @@ circuit_expire_building(void)
             NULL)
           break;
         /* fallthrough! */
-      case CIRCUIT_PURPOSE_C_INTRODUCING:
-        /* connection_ap_handshake_attach_circuit() will relaunch for us */
       case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT:
       case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED:
         /* If we have reached this line, we want to spare the circ for now. */