diff options
author | Mike Perry <mikeperry-git@fscked.org> | 2010-06-15 14:46:01 -0700 |
---|---|---|
committer | Mike Perry <mikeperry-git@fscked.org> | 2010-06-15 20:04:46 -0700 |
commit | 82922ea45a24e7f79ac4c1ddf4d9de02c604546d (patch) | |
tree | 1ef4d303eb8b8edcc2bd1fb2fb6147b28763649f /src/or/circuituse.c | |
parent | c6c8fbf852bb2ecee6387609e8cbf78a772c7e01 (diff) | |
download | tor-82922ea45a24e7f79ac4c1ddf4d9de02c604546d.tar.gz tor-82922ea45a24e7f79ac4c1ddf4d9de02c604546d.zip |
Be more proactive about closing unused circuits.
We need to ensure that we close timeout measurement circuits. While
we're at it, we should close really old circuits of certain types that
aren't in use, and log really old circuits of other types.
Diffstat (limited to 'src/or/circuituse.c')
-rw-r--r-- | src/or/circuituse.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/or/circuituse.c b/src/or/circuituse.c index 5027eb5a28..0187448aaa 100644 --- a/src/or/circuituse.c +++ b/src/or/circuituse.c @@ -717,17 +717,27 @@ circuit_expire_old_circuits_clientside(time_t now) circ->n_circ_id, (int)(now - circ->timestamp_dirty), circ->purpose); circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED); - // XXX: Do we ever mark non-dirty odd-purpose circuits for close? - // XXX: See irc backlog. Want to log for those circuits not mentioned. - // But remember to add flag. this is called 1x/sec - } else if (!circ->timestamp_dirty && - circ->state == CIRCUIT_STATE_OPEN && - circ->purpose == CIRCUIT_PURPOSE_C_GENERAL) { + } else if (!circ->timestamp_dirty && circ->state == CIRCUIT_STATE_OPEN) { if (circ->timestamp_created < cutoff) { - log_debug(LD_CIRC, - "Closing circuit that has been unused for %d seconds.", - (int)(now - circ->timestamp_created)); - circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED); + if (circ->purpose == CIRCUIT_PURPOSE_C_GENERAL || + circ->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT || + circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO || + circ->purpose == CIRCUIT_PURPOSE_TESTING || + (circ->purpose >= CIRCUIT_PURPOSE_C_INTRODUCING && + circ->purpose <= CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED) || + circ->purpose == CIRCUIT_PURPOSE_S_CONNECT_REND) { + log_debug(LD_CIRC, + "Closing circuit that has been unused for %d seconds.", + (int)(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.", + TO_ORIGIN_CIRCUIT(circ)->global_identifier, + now - circ->timestamp_created); + TO_ORIGIN_CIRCUIT(circ)->is_ancient = 1; + } } } } |