|
@@ -397,7 +397,7 @@ connection_ap_expire_beginning(void)
|
|
|
or_options_t *options = get_options();
|
|
|
int severity;
|
|
|
int cutoff;
|
|
|
- int seconds_idle;
|
|
|
+ int seconds_idle, seconds_since_born;
|
|
|
smartlist_t *conns = get_connection_array();
|
|
|
|
|
|
SMARTLIST_FOREACH_BEGIN(conns, connection_t *, c) {
|
|
@@ -408,18 +408,21 @@ connection_ap_expire_beginning(void)
|
|
|
severity = (tor_addr_is_null(&conn->_base.addr) && !conn->_base.port)
|
|
|
? LOG_INFO : LOG_NOTICE;
|
|
|
seconds_idle = (int)( now - conn->_base.timestamp_lastread );
|
|
|
+ seconds_since_born = (int)( now - conn->_base.timestamp_created );
|
|
|
|
|
|
- /* XXX021 this clause was originally thought redundant with the
|
|
|
- * clause in connection_ap_handshake_attach_circuit(). But actually,
|
|
|
- * we need it because controllers that put streams in controller_wait
|
|
|
- * state never go to the other clause. we should fix so it compares
|
|
|
- * seconds since timestamp_created, not since last read. -RD */
|
|
|
+ if (conn->_base.state == AP_CONN_STATE_OPEN)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ /* We already consider SocksTimeout in
|
|
|
+ * connection_ap_handshake_attach_circuit(), but we need to consider
|
|
|
+ * it here too because controllers that put streams in controller_wait
|
|
|
+ * state never ask Tor to attach the circuit. */
|
|
|
if (AP_CONN_STATE_IS_UNATTACHED(conn->_base.state)) {
|
|
|
- if (seconds_idle >= options->SocksTimeout) {
|
|
|
+ if (seconds_since_born >= options->SocksTimeout) {
|
|
|
log_fn(severity, LD_APP,
|
|
|
"Tried for %d seconds to get a connection to %s:%d. "
|
|
|
"Giving up. (%s)",
|
|
|
- seconds_idle, safe_str(conn->socks_request->address),
|
|
|
+ seconds_since_born, safe_str(conn->socks_request->address),
|
|
|
conn->socks_request->port,
|
|
|
conn_state_to_string(CONN_TYPE_AP, conn->_base.state));
|
|
|
connection_mark_unattached_ap(conn, END_STREAM_REASON_TIMEOUT);
|
|
@@ -427,9 +430,6 @@ connection_ap_expire_beginning(void)
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if (conn->_base.state == AP_CONN_STATE_OPEN)
|
|
|
- continue;
|
|
|
-
|
|
|
/* We're in state connect_wait or resolve_wait now -- waiting for a
|
|
|
* reply to our relay cell. See if we want to retry/give up. */
|
|
|
|