summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2008-06-13 05:12:27 +0000
committerRoger Dingledine <arma@torproject.org>2008-06-13 05:12:27 +0000
commit753a76493947d9aff4fe4c52d6b8bf5362510f9d (patch)
tree3c9987af866c9255113ea749d73c9479e23cb2b0
parent6a3755d1f9d2a57612ef5b99db498763f349a33f (diff)
downloadtor-753a76493947d9aff4fe4c52d6b8bf5362510f9d.tar.gz
tor-753a76493947d9aff4fe4c52d6b8bf5362510f9d.zip
backport r14329 and r14334:
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
-rw-r--r--ChangeLog3
-rw-r--r--doc/TODO.0202
-rw-r--r--src/or/connection_or.c4
-rw-r--r--src/or/or.h2
-rw-r--r--src/or/relay.c10
5 files changed, 15 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 906b4bf9c6..3e4ae02b1d 100644
--- 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.
diff --git a/doc/TODO.020 b/doc/TODO.020
index ed16731599..f28148c8f4 100644
--- a/doc/TODO.020
+++ b/doc/TODO.020
@@ -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:
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index 5d9800d093..00217f2dcb 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -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;
}
}
diff --git a/src/or/or.h b/src/or/or.h
index ba7bdf9bdd..6e7654ca15 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -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);
diff --git a/src/or/relay.c b/src/or/relay.c
index 91f7f167b6..58b3d9eaf6 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -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));
}
}