]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Prevent spurious closes when we put stuff on a conn that has not written for a while.
authorNick Mathewson <nickm@torproject.org>
Tue, 22 Mar 2005 20:25:51 +0000 (20:25 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 22 Mar 2005 20:25:51 +0000 (20:25 +0000)
svn:r3816

src/or/main.c
src/or/or.h

index c26d4f03cc34279faae5f27441897e9441200b1e..36917db838758f392e4bbc96d1b2aab8f680cf4f 100644 (file)
@@ -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. */
index c4e7f4f28d80dcde52b0acdf448628f2c485ce2b..92d3de343320f5b0109a50f0474ab5abccc97399 100644 (file)
@@ -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. */