]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
backport r14329 and r14334:
authorRoger Dingledine <arma@torproject.org>
Fri, 13 Jun 2008 05:12:27 +0000 (05:12 +0000)
committerRoger Dingledine <arma@torproject.org>
Fri, 13 Jun 2008 05:12:27 +0000 (05:12 +0000)
Make relay cells written on a connection count as non-padding when
tracking how long a connection has been in use. Bugfix on
0.2.0.1-alpha. Spotted by lodger.

svn:r15185

ChangeLog
doc/TODO.020
src/or/connection_or.c
src/or/or.h
src/or/relay.c

index 906b4bf9c6a1733e95a182f4dbea29c86f873199..3e4ae02b1d379636e3b8f690f1c7b2bf65feda0d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -30,6 +30,9 @@ Changes in version 0.2.0.28-rc - 2008-06-13
       bug 688, reported by mfr.
     - When we haven't had any application requests lately, don't bother
       logging that we have expired a bunch of descriptors.
+    - Make relay cells written on a connection count as non-padding when
+      tracking how long a connection has been in use. Bugfix on
+      0.2.0.1-alpha. Spotted by lodger.
     - Fix unit tests in 0.2.0.27-rc.
     - Fix compile on Windows.
 
index ed16731599dee483f572a3d3c599b4a81bd30b5a..f28148c8f4f837b9592bf6561d30a4548862726f 100644 (file)
@@ -16,7 +16,7 @@ Backport items for 0.2.0:
   o r14205: free authority certs on exit.
   o r14212: free static hashtables and log mutex on exit.
   o r14214: don't read torrc when all we do is --hash-password
-  - r14329: update last_added_nonpadding for relay cells.
+  o r14329: update last_added_nonpadding for relay cells.
   - r14247: tor-spec and dir-spec updates [just backport the whole files]
 
 Backport for 0.2.0 once better tested:
index 5d9800d093a75cab059e6d0849e6b314316ec496..00217f2dcbd994f8f4e20e4a993238c956843ccb 100644 (file)
@@ -285,13 +285,15 @@ int
 connection_or_flushed_some(or_connection_t *conn)
 {
   size_t datalen = buf_datalen(conn->_base.outbuf);
+  time_t now = time(NULL);
   /* If we're under the low water mark, add cells until we're just over the
    * high water mark. */
   if (datalen < OR_CONN_LOWWATER) {
     ssize_t n = (OR_CONN_HIGHWATER - datalen + CELL_NETWORK_SIZE-1)
       / CELL_NETWORK_SIZE;
     while (conn->active_circuits && n > 0) {
-      int flushed = connection_or_flush_from_first_active_circuit(conn, 1);
+      int flushed;
+      flushed = connection_or_flush_from_first_active_circuit(conn, 1, now);
       n -= flushed;
     }
   }
index ba7bdf9bdd9f4d4d33031ec33f70554446753ccc..6e7654ca15730203e9864b529aeaefcd5add311d 100644 (file)
@@ -3557,7 +3557,7 @@ void append_cell_to_circuit_queue(circuit_t *circ, or_connection_t *orconn,
                                   cell_t *cell, int direction);
 void connection_or_unlink_all_active_circs(or_connection_t *conn);
 int connection_or_flush_from_first_active_circuit(or_connection_t *conn,
-                                                  int max);
+                                                  int max, time_t now);
 void assert_active_circuits_ok(or_connection_t *orconn);
 void make_circuit_inactive_on_conn(circuit_t *circ, or_connection_t *conn);
 void make_circuit_active_on_conn(circuit_t *circ, or_connection_t *conn);
index 91f7f167b6c158be35c12a6b2f877b365f1cabfd..58b3d9eaf62ed900fe9c4fac3955db214169cfeb 100644 (file)
@@ -1833,7 +1833,8 @@ set_streams_blocked_on_circ(circuit_t *circ, or_connection_t *orconn,
  * <b>conn</b>-&gt;outbuf.  Return the number of cells written.  Advance
  * the active circuit pointer to the next active circuit in the ring. */
 int
-connection_or_flush_from_first_active_circuit(or_connection_t *conn, int max)
+connection_or_flush_from_first_active_circuit(or_connection_t *conn,
+                                              int max, time_t now)
 {
   int n_flushed;
   cell_queue_t *queue;
@@ -1866,7 +1867,7 @@ connection_or_flush_from_first_active_circuit(or_connection_t *conn, int max)
        * for us.
        */
       assert_active_circuits_ok_paranoid(conn);
-      return n_flushed;
+      goto done;
     }
   }
   tor_assert(*next_circ_on_conn_p(circ,conn));
@@ -1883,6 +1884,9 @@ connection_or_flush_from_first_active_circuit(or_connection_t *conn, int max)
     log_debug(LD_GENERAL, "Made a circuit inactive.");
     make_circuit_inactive_on_conn(circ, conn);
   }
+ done:
+  if (n_flushed)
+    conn->timestamp_last_added_nonpadding = now;
   return n_flushed;
 }
 
@@ -1927,7 +1931,7 @@ append_cell_to_circuit_queue(circuit_t *circ, or_connection_t *orconn,
      * get called, and we can start putting more data onto the buffer then.
      */
     log_debug(LD_GENERAL, "Primed a buffer.");
-    connection_or_flush_from_first_active_circuit(orconn, 1);
+    connection_or_flush_from_first_active_circuit(orconn, 1, time(NULL));
   }
 }