Commit 216e349c authored by Roger Dingledine's avatar Roger Dingledine
Browse files

parameterize two more timeout constants in circuit-land.


svn:r6220
parent ad236d4b
Loading
Loading
Loading
Loading
+7 −15
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ extern circuit_t *global_circuitlist; /* from circuitlist.c */

/********* 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 must_be_open, uint8_t purpose,
  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(connection_t *conn)
  } /* 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));
+2 −0
Original line number Diff line number Diff line
@@ -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),
+4 −0
Original line number Diff line number Diff line
@@ -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? */