summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/TODO2
-rw-r--r--src/or/connection_or.c4
-rw-r--r--src/or/or.h2
-rw-r--r--src/or/relay.c7
4 files changed, 10 insertions, 5 deletions
diff --git a/doc/TODO b/doc/TODO
index a2a74be45a..ca979cb96a 100644
--- a/doc/TODO
+++ b/doc/TODO
@@ -323,6 +323,8 @@ P - create a "make win32-bundle" for vidalia-privoxy-tor-torbutton bundle
- Router_choose_random_node() has a big pile of args. make it "flags".
- Streamline how we pick entry nodes: Make choose_random_entry() have
less magic and less control logic.
+ - Don't call time(NULL) so much; instead have a static time_t field
+ that gets updated only a handful of times per second.
- Make Tor able to chroot itself
o allow it to load an entire config file from control interface
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>-&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;
@@ -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));
}
}