[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] parameterize two more timeout constants in circuit-land.



Update of /home2/or/cvsroot/tor/src/or
In directory moria:/home/arma/work/onion/cvs/tor/src/or

Modified Files:
	circuituse.c config.c or.h 
Log Message:
parameterize two more timeout constants in circuit-land.


Index: circuituse.c
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/circuituse.c,v
retrieving revision 1.120
retrieving revision 1.121
diff -u -p -d -r1.120 -r1.121
--- circuituse.c	21 Mar 2006 23:27:43 -0000	1.120
+++ circuituse.c	22 Mar 2006 00:52:36 -0000	1.121
@@ -19,7 +19,7 @@ extern circuit_t *global_circuitlist; /*
 
 /********* END VARIABLES ************/
 
-static void circuit_expire_old_circuits(void);
+static void circuit_expire_old_circuits(time_t now);
 static void circuit_increment_failure_count(void);
 
 /* Return 1 if <b>circ</b> could be returned by circuit_get_best().
@@ -177,19 +177,14 @@ circuit_get_best(connection_t *conn, int
   return best;
 }
 
-/** If we find a circuit that isn't open yet and was born this many
- * seconds ago, then assume something went wrong, and cull it.
- */
-#define MIN_SECONDS_BEFORE_EXPIRING_CIRC 60
-
 /** Close all circuits that start at us, aren't open, and were born
- * at least MIN_SECONDS_BEFORE_EXPIRING_CIRC seconds ago.
+ * at least CircuitBuildTimeout seconds ago.
  */
 void
 circuit_expire_building(time_t now)
 {
   circuit_t *victim, *circ = global_circuitlist;
-  time_t cutoff = now - MIN_SECONDS_BEFORE_EXPIRING_CIRC;
+  time_t cutoff = now - get_options()->CircuitBuildTimeout;
 
   while (circ) {
     victim = circ;
@@ -431,7 +426,7 @@ circuit_build_needed_circs(time_t now)
     time_to_new_circuit = now + get_options()->NewCircuitPeriod;
     if (proxy_mode(get_options()))
       addressmap_clean(now);
-    circuit_expire_old_circuits();
+    circuit_expire_old_circuits(now);
 
 #if 0 /* disable for now, until predict-and-launch-new can cull leftovers */
     circ = circuit_get_youngest_clean_open(CIRCUIT_PURPOSE_C_GENERAL);
@@ -547,17 +542,14 @@ circuit_about_to_close_connection(connec
   } /* end switch */
 }
 
-/** How old do we let an unused circuit get before expiring it? */
-#define CIRCUIT_UNUSED_CIRC_TIMEOUT (60*60)
-
 /** Find each circuit that has been dirty for too long, and has
  * no streams on it: mark it for close.
  */
 static void
-circuit_expire_old_circuits(void)
+circuit_expire_old_circuits(time_t now)
 {
   circuit_t *circ;
-  time_t now = time(NULL);
+  time_t cutoff = now - get_options()->CircuitIdleTimeout;
 
   for (circ = global_circuitlist; circ; circ = circ->next) {
     if (circ->marked_for_close)
@@ -579,7 +571,7 @@ circuit_expire_old_circuits(void)
     } else if (!circ->timestamp_dirty && CIRCUIT_IS_ORIGIN(circ) &&
                circ->state == CIRCUIT_STATE_OPEN &&
                circ->purpose == CIRCUIT_PURPOSE_C_GENERAL) {
-      if (circ->timestamp_created + CIRCUIT_UNUSED_CIRC_TIMEOUT < now) {
+      if (circ->timestamp_created < cutoff) {
         log_debug(LD_CIRC,
                   "Closing circuit that has been unused for %d seconds.",
                   (int)(now - circ->timestamp_created));

Index: config.c
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/config.c,v
retrieving revision 1.542
retrieving revision 1.543
diff -u -p -d -r1.542 -r1.543
--- config.c	22 Mar 2006 00:03:51 -0000	1.542
+++ config.c	22 Mar 2006 00:52:36 -0000	1.543
@@ -136,6 +136,8 @@ static config_var_t _option_vars[] = {
   VAR("AuthoritativeDirectory",BOOL,   AuthoritativeDir,     "0"),
   VAR("BandwidthBurst",      MEMUNIT,  BandwidthBurst,       "6 MB"),
   VAR("BandwidthRate",       MEMUNIT,  BandwidthRate,        "3 MB"),
+  VAR("CircuitBuildTimeout", INTERVAL, CircuitBuildTimeout,  "1 minute"),
+  VAR("CircuitIdleTimeout",  INTERVAL, CircuitIdleTimeout,   "1 hour"),
   VAR("ClientOnly",          BOOL,     ClientOnly,           "0"),
   VAR("ConnLimit",           UINT,     ConnLimit,            "1024"),
   VAR("ContactInfo",         STRING,   ContactInfo,          NULL),

Index: or.h
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/or.h,v
retrieving revision 1.813
retrieving revision 1.814
diff -u -p -d -r1.813 -r1.814
--- or.h	21 Mar 2006 23:27:43 -0000	1.813
+++ or.h	22 Mar 2006 00:52:37 -0000	1.814
@@ -1317,6 +1317,10 @@ typedef struct {
                         * connections alive? */
   int SocksTimeout; /**< How long do we let a socks connection wait
                      * unattached before we fail it? */
+  int CircuitBuildTimeout; /**< Cull non-open circuits that were born
+                            * at least this many seconds ago. */
+  int CircuitIdleTimeout; /**< Cull open clean circuits that were born
+                           * at least this many seconds ago. */
   int MaxOnionsPending; /**< How many circuit CREATE requests do we allow
                          * to wait simultaneously before we start dropping
                          * them? */