mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
r14001@catbus: nickm | 2007-07-29 21:31:53 -0400
Try to call time(NULL) a little less. svn:r10980
This commit is contained in:
parent
a3b8b2c4e3
commit
915c4c3ab8
@ -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) {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user