diff options
author | Nick Mathewson <nickm@torproject.org> | 2008-04-09 18:44:50 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2008-04-09 18:44:50 +0000 |
commit | 4901ee0a8c0efafb71b5fdaf6961ef04556ec1a4 (patch) | |
tree | 107b368dc6dd304989e2ae9653de74738915325f /src/or | |
parent | 186df044cdf896131af5fba1f2e4da7a468e79ab (diff) | |
download | tor-4901ee0a8c0efafb71b5fdaf6961ef04556ec1a4.tar.gz tor-4901ee0a8c0efafb71b5fdaf6961ef04556ec1a4.zip |
r19273@catbus: nickm | 2008-04-09 14:44:23 -0400
Do a slightly better fix for r14329: don't call time() quite so much. Also note the time(NULL) hack we wanted to do in the TODO.
svn:r14334
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/connection_or.c | 4 | ||||
-rw-r--r-- | src/or/or.h | 2 | ||||
-rw-r--r-- | src/or/relay.c | 7 |
3 files changed, 8 insertions, 5 deletions
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 71397597e1..a77794467d 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -3560,7 +3560,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 539bc8092b..0510ab4d4b 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -1835,7 +1835,8 @@ set_streams_blocked_on_circ(circuit_t *circ, or_connection_t *orconn, * <b>conn</b>->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; @@ -1887,7 +1888,7 @@ connection_or_flush_from_first_active_circuit(or_connection_t *conn, int max) } done: if (n_flushed) - conn->timestamp_last_added_nonpadding = time(NULL); + conn->timestamp_last_added_nonpadding = now; return n_flushed; } @@ -1932,7 +1933,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)); } } |