mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Prevent spurious closes when we put stuff on a conn that has not written for a while.
svn:r3816
This commit is contained in:
parent
8a763b5ae3
commit
ab1d0049a2
@ -660,6 +660,9 @@ static void run_connection_housekeeping(int i, time_t now) {
|
||||
connection_t *conn = connection_array[i];
|
||||
or_options_t *options = get_options();
|
||||
|
||||
if (conn->outbuf && !buf_datalen(conn->outbuf))
|
||||
conn->timestamp_lastempty = now;
|
||||
|
||||
/* Expire any directory connections that haven't sent anything for 5 min */
|
||||
if (conn->type == CONN_TYPE_DIR &&
|
||||
!conn->marked_for_close &&
|
||||
@ -691,11 +694,13 @@ static void run_connection_housekeeping(int i, time_t now) {
|
||||
i,conn->address, conn->port);
|
||||
connection_mark_for_close(conn);
|
||||
conn->hold_open_until_flushed = 1;
|
||||
} else if (buf_datalen(conn->outbuf) &&
|
||||
// XXX will this have races were stuff just got written to the conn and we kill it?
|
||||
now >= conn->timestamp_lastwritten + options->KeepalivePeriod*10) {
|
||||
log_fn(LOG_INFO,"Expiring stuck connection to %d (%s:%d).",
|
||||
i, conn->address, conn->port);
|
||||
} else if (
|
||||
now >= conn->timestamp_lastempty + options->KeepalivePeriod*10 &&
|
||||
now >= conn->timestamp_lastwritten + options->KeepalivePeriod*10) {
|
||||
log_fn(LOG_NOTICE,"Expiring stuck connection to %d (%s:%d). (%ul bytes to flush; %d seconds since last write)",
|
||||
i, conn->address, conn->port,
|
||||
(unsigned long)buf_datalen(conn->outbuf),
|
||||
(int)(now-conn->timestamp_lastwritten));
|
||||
connection_mark_for_close(conn);
|
||||
} else {
|
||||
/* either in clique mode, or we've got a circuit. send a padding cell. */
|
||||
|
@ -560,6 +560,7 @@ struct connection_t {
|
||||
time_t timestamp_lastwritten; /**< When was the last time poll() said we could write? */
|
||||
|
||||
time_t timestamp_created; /**< When was this connection_t created? */
|
||||
time_t timestamp_lastempty; /**< When was the outbuf last completely empty?*/
|
||||
|
||||
uint32_t addr; /**< IP of the other side of the connection; used to identify
|
||||
* routers, along with port. */
|
||||
|
Loading…
Reference in New Issue
Block a user