Browse Source

expire old CIRCUIT_PURPOSE_C_REND_READY circs too

svn:r1585
Roger Dingledine 21 years ago
parent
commit
48e0228f1e
2 changed files with 9 additions and 4 deletions
  1. 8 3
      src/or/circuit.c
  2. 1 1
      src/or/main.c

+ 8 - 3
src/or/circuit.c

@@ -452,11 +452,16 @@ void circuit_expire_building(void) {
     if(victim->timestamp_created + MIN_SECONDS_BEFORE_EXPIRING_CIRC > now)
       continue; /* it's young still, don't mess with it */
 
-    /* if circ is !open, or if it's open but purpose is est intro or est rend,
-     * then mark it for close */
+    /* if circ is !open, or if it's open but purpose is a non-finished
+     * intro or rend, then mark it for close */
     if(victim->state != CIRCUIT_STATE_OPEN ||
        victim->purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND ||
-       victim->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) {
+       victim->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO ||
+       /* c_rend_ready circs measure age since timestamp_dirty,
+        * because that's set when they switch purposes
+        */
+       (victim->purpose == CIRCUIT_PURPOSE_C_REND_READY &&
+        victim->timestamp_dirty + MIN_SECONDS_BEFORE_EXPIRING_CIRC > now)) {
       if(victim->n_conn)
         log_fn(LOG_INFO,"Abandoning circ %s:%d:%d (state %d:%s)",
                victim->n_conn->address, victim->n_port, victim->n_circ_id,

+ 1 - 1
src/or/main.c

@@ -364,7 +364,7 @@ static void run_scheduled_events(time_t now) {
   }
 
   /* 2. Every second, we examine pending circuits and prune the
-   *    ones which have been pending for more than 3 seconds.
+   *    ones which have been pending for more than a few seconds.
    *    We do this before step 3, so it can try building more if
    *    it's not comfortable with the number of available circuits.
    */