[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] Prevent spurious closes when we put stuff on a conn that ha...
- To: or-cvs@xxxxxxxxxxxxx
- Subject: [or-cvs] Prevent spurious closes when we put stuff on a conn that ha...
- From: nickm@xxxxxxxx (Nick Mathewson)
- Date: Tue, 22 Mar 2005 15:25:54 -0500 (EST)
- Delivered-to: archiver@seul.org
- Delivered-to: or-cvs-outgoing@seul.org
- Delivered-to: or-cvs@seul.org
- Delivery-date: Tue, 22 Mar 2005 15:26:17 -0500
- Reply-to: or-dev@xxxxxxxxxxxxx
- Sender: owner-or-cvs@xxxxxxxxxxxxx
Update of /home/or/cvsroot/tor/src/or
In directory moria.mit.edu:/tmp/cvs-serv26603/src/or
Modified Files:
main.c or.h
Log Message:
Prevent spurious closes when we put stuff on a conn that has not written for a while.
Index: main.c
===================================================================
RCS file: /home/or/cvsroot/tor/src/or/main.c,v
retrieving revision 1.466
retrieving revision 1.467
diff -u -d -r1.466 -r1.467
--- main.c 22 Mar 2005 20:04:00 -0000 1.466
+++ main.c 22 Mar 2005 20:25:51 -0000 1.467
@@ -660,6 +660,9 @@
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 @@
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. */
Index: or.h
===================================================================
RCS file: /home/or/cvsroot/tor/src/or/or.h,v
retrieving revision 1.568
retrieving revision 1.569
diff -u -d -r1.568 -r1.569
--- or.h 22 Mar 2005 19:36:38 -0000 1.568
+++ or.h 22 Mar 2005 20:25:51 -0000 1.569
@@ -560,6 +560,7 @@
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. */