diff options
author | Nick Mathewson <nickm@torproject.org> | 2007-07-30 01:32:12 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2007-07-30 01:32:12 +0000 |
commit | 915c4c3ab8faae79151fbeb0f2116b56d52b0f5d (patch) | |
tree | b247296d0f94bb1ed2a0b8dc49b9ce2351684440 | |
parent | a3b8b2c4e362d74e56356faf9889c64b92e9eabc (diff) | |
download | tor-915c4c3ab8faae79151fbeb0f2116b56d52b0f5d.tar.gz tor-915c4c3ab8faae79151fbeb0f2116b56d52b0f5d.zip |
r14001@catbus: nickm | 2007-07-29 21:31:53 -0400
Try to call time(NULL) a little less.
svn:r10980
-rw-r--r-- | src/or/connection.c | 16 | ||||
-rw-r--r-- | src/or/main.c | 8 | ||||
-rw-r--r-- | src/or/or.h | 4 | ||||
-rw-r--r-- | src/or/relay.c | 1 |
4 files changed, 16 insertions, 13 deletions
diff --git a/src/or/connection.c b/src/or/connection.c index 0061e8ec84..dbcc14c9b0 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -1427,7 +1427,7 @@ connection_bucket_round_robin(int base, int priority, /** How many bytes at most can we read onto this connection? */ static int -connection_bucket_read_limit(connection_t *conn) +connection_bucket_read_limit(connection_t *conn, time_t now) { int base = connection_speaks_cells(conn) ? CELL_NETWORK_SIZE : RELAY_PAYLOAD_SIZE; @@ -1446,7 +1446,7 @@ connection_bucket_read_limit(connection_t *conn) return conn_bucket>=0 ? conn_bucket : 1<<14; } - if (connection_counts_as_relayed_traffic(conn, time(NULL)) && + if (connection_counts_as_relayed_traffic(conn, now) && global_relayed_read_bucket <= global_read_bucket) global_bucket = global_relayed_read_bucket; @@ -1456,7 +1456,7 @@ connection_bucket_read_limit(connection_t *conn) /** How many bytes at most can we write onto this connection? */ int -connection_bucket_write_limit(connection_t *conn) +connection_bucket_write_limit(connection_t *conn, time_t now) { int base = connection_speaks_cells(conn) ? CELL_NETWORK_SIZE : RELAY_PAYLOAD_SIZE; @@ -1468,7 +1468,7 @@ connection_bucket_write_limit(connection_t *conn) return conn->outbuf_flushlen; } - if (connection_counts_as_relayed_traffic(conn, time(NULL)) && + if (connection_counts_as_relayed_traffic(conn, now) && global_relayed_write_bucket <= global_write_bucket) global_bucket = global_relayed_write_bucket; @@ -1632,12 +1632,11 @@ connection_bucket_refill_helper(int *bucket, int rate, int burst, /** A second has rolled over; increment buckets appropriately. */ void -connection_bucket_refill(int seconds_elapsed) +connection_bucket_refill(int seconds_elapsed, time_t now) { or_options_t *options = get_options(); smartlist_t *conns = get_connection_array(); int relayrate, relayburst; - time_t now = time(NULL); if (options->RelayBandwidthRate) { relayrate = (int)options->RelayBandwidthRate; @@ -1847,7 +1846,8 @@ connection_read_to_buf(connection_t *conn, int *max_to_read) if (at_most == -1) { /* we need to initialize it */ /* how many bytes are we allowed to read? */ - at_most = connection_bucket_read_limit(conn); + /* XXXX020 too many calls to time(). Do they hurt? */ + at_most = connection_bucket_read_limit(conn, time(NULL)); } bytes_in_buf = buf_capacity(conn->inbuf) - buf_datalen(conn->inbuf); @@ -2074,7 +2074,7 @@ connection_handle_write(connection_t *conn, int force) } max_to_write = force ? (int)conn->outbuf_flushlen - : connection_bucket_write_limit(conn); + : connection_bucket_write_limit(conn, now); if (connection_speaks_cells(conn) && conn->state > OR_CONN_STATE_PROXY_READING) { diff --git a/src/or/main.c b/src/or/main.c index 7ca7b16aea..25a0f32616 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -564,18 +564,20 @@ conn_close_if_marked(int i) { connection_t *conn; int retval; + time_t now; conn = smartlist_get(connection_array, i); if (!conn->marked_for_close) return 0; /* nothing to see here, move along */ - assert_connection_ok(conn, time(NULL)); + now = time(NULL); + assert_connection_ok(conn, now); assert_all_pending_dns_resolves_ok(); log_debug(LD_NET,"Cleaning up connection (fd %d).",conn->s); if ((conn->s >= 0 || conn->linked_conn) && connection_wants_to_flush(conn)) { /* s == -1 means it's an incomplete edge connection, or that the socket * has already been closed as unflushable. */ - int sz = connection_bucket_write_limit(conn); + int sz = connection_bucket_write_limit(conn, now); if (!conn->hold_open_until_flushed) log_info(LD_NET, "Conn (addr %s, fd %d, type %s, state %d) marked, but wants " @@ -1143,7 +1145,7 @@ second_elapsed_callback(int fd, short event, void *args) control_event_stream_bandwidth_used(); if (seconds_elapsed > 0) - connection_bucket_refill(seconds_elapsed); + connection_bucket_refill(seconds_elapsed, now.tv_sec); stats_prev_global_read_bucket = global_read_bucket; stats_prev_global_write_bucket = global_write_bucket; diff --git a/src/or/or.h b/src/or/or.h index e60f9887be..3bad879491 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2422,10 +2422,10 @@ int connection_connect(connection_t *conn, const char *address, uint32_t addr, int retry_all_listeners(smartlist_t *replaced_conns, smartlist_t *new_conns); -int connection_bucket_write_limit(connection_t *conn); +int connection_bucket_write_limit(connection_t *conn, time_t now); int global_write_bucket_low(connection_t *conn, size_t attempt, int priority); void connection_bucket_init(void); -void connection_bucket_refill(int seconds_elapsed); +void connection_bucket_refill(int seconds_elapsed, time_t now); int connection_handle_read(connection_t *conn); diff --git a/src/or/relay.c b/src/or/relay.c index ff3293b5b2..364b976b5c 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -507,6 +507,7 @@ relay_send_command_from_edge(uint16_t stream_id, circuit_t *circ, if (cell_direction == CELL_DIRECTION_OUT && circ->n_conn) { /* if we're using relaybandwidthrate, this conn wants priority */ + /* XXXX020 the call to time() seems little too frequent */ circ->n_conn->client_used = time(NULL); } |