mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
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
).
This commit is contained in:
parent
30b766ba12
commit
4d2e9974f9
7
changes/bug1840
Normal file
7
changes/bug1840
Normal file
@ -0,0 +1,7 @@
|
||||
o Minor bugfixes:
|
||||
- Allow handshaking OR connections to take a full KeepalivePeriod
|
||||
seconds to handshake. Previously, we would close them after
|
||||
IDLE_OR_CONN_TIMEOUT seconds, as if they were open. This is a
|
||||
bugfix on 0.2.1.26. Thanks to mingw-san for analysis help. Fixes
|
||||
bug 1840.
|
||||
|
@ -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.*/
|
||||
|
Loading…
Reference in New Issue
Block a user