Browse Source

Add check for CIRCUIT_PURPOSE_S_REND_JOINED.

These circuits stick around much longer than others on the server side for
performance reasons. Their lifetime is controlled by the client.
Mike Perry 14 years ago
parent
commit
5b0c0e1f89
1 changed files with 12 additions and 7 deletions
  1. 12 7
      src/or/circuituse.c

+ 12 - 7
src/or/circuituse.c

@@ -746,13 +746,18 @@ circuit_expire_old_circuits_clientside(time_t now)
                     (long)(now - circ->timestamp_created));
           circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
         } else if (!TO_ORIGIN_CIRCUIT(circ)->is_ancient) {
-          log_notice(LD_CIRC,
-                     "Ancient non-dirty circuit %d is still around after "
-                     "%ld seconds. Purpose: %d",
-                     TO_ORIGIN_CIRCUIT(circ)->global_identifier,
-                     (long)(now - circ->timestamp_created),
-                     circ->purpose);
-          TO_ORIGIN_CIRCUIT(circ)->is_ancient = 1;
+          /* Server side rend joined circuits can end up really old, because
+           * they are reused by clients for longer than normal. The client
+           * controls their lifespan. */
+          if (circ->purpose != CIRCUIT_PURPOSE_S_REND_JOINED) {
+            log_notice(LD_CIRC,
+                       "Ancient non-dirty circuit %d is still around after "
+                       "%ld seconds. Purpose: %d",
+                       TO_ORIGIN_CIRCUIT(circ)->global_identifier,
+                       (long)(now - circ->timestamp_created),
+                       circ->purpose);
+            TO_ORIGIN_CIRCUIT(circ)->is_ancient = 1;
+          }
         }
       }
     }