diff options
author | Nick Mathewson <nickm@torproject.org> | 2010-09-03 11:32:35 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2010-09-03 11:32:35 -0400 |
commit | 4d2e9974f91f7dff067208655a76d911c50b72a3 (patch) | |
tree | 3b6b97dbd37c1a60376c4115fb3c6df06e071500 /src | |
parent | 30b766ba129c5eaefacd70fe29b482fb63ebfffe (diff) | |
download | tor-4d2e9974f91f7dff067208655a76d911c50b72a3.tar tor-4d2e9974f91f7dff067208655a76d911c50b72a3.tar.gz |
Close a non-open OR connection *only* after KeepalivePeriod.
When we introduced the code to close non-open OR connections after
KeepalivePeriod had passed, we replaced some code that said
if (!connection_is_open(conn)) {
/* let it keep handshaking forever */
} else if (do other tests here) {
...
with new code that said
if (!connection_is_open(conn) && past_keepalive) {
/* let it keep handshaking forever */
} else if (do other tests here) {
...
This was a mistake, since it made all the other tests start applying
to non-open connections, thus causing bug 1840, where non-open
connections get closed way early.
Fixes bug 1840. Bugfix on 0.2.1.26 (commit 67b38d50).
Diffstat (limited to 'src')
-rw-r--r-- | src/or/main.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/or/main.c b/src/or/main.c index 9052f7c57..174c874f6 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -735,12 +735,15 @@ run_connection_housekeeping(int i, time_t now) "Tor gave up on the connection"); connection_mark_for_close(conn); conn->hold_open_until_flushed = 1; - } else if (past_keepalive && !connection_state_is_open(conn)) { - /* We never managed to actually get this connection open and happy. */ - log_info(LD_OR,"Expiring non-open OR connection to fd %d (%s:%d).", - conn->s,conn->address, conn->port); - connection_mark_for_close(conn); - conn->hold_open_until_flushed = 1; + } else if (!connection_state_is_open(conn)) { + if (past_keepalive) { + /* We never managed to actually get this connection open and happy. */ + log_info(LD_OR,"Expiring non-open OR connection to fd %d (%s:%d).", + conn->s,conn->address, conn->port); + connection_mark_for_close(conn); + conn->hold_open_until_flushed = 1; /* XXXX why? I think we can remove + * this. -NM */ + } } else if (we_are_hibernating() && !or_conn->n_circuits && !buf_datalen(conn->outbuf)) { /* We're hibernating, there's no circuits, and nothing to flush.*/ |