mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
src/or/connection.c: expose bucket_millis_empty for bufferevents test
Currently tor fails to build its test when enabled with bufferevents because an #ifndef USE_BUFFEREVENTS hides bucket_millis_empty() and friends. This is fine if we don't run tests, but if we do, we need these functions in src/or/libtor-testing.a when linking src/test/test. This patch moves the functions outside the #ifndef and exposes them. See downstream bug: https://bugs.gentoo.org/show_bug.cgi?id=510124
This commit is contained in:
parent
589de5ec20
commit
d504a4e36f
@ -2650,14 +2650,6 @@ record_num_bytes_transferred(connection_t *conn,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef USE_BUFFEREVENTS
|
|
||||||
/** Last time at which the global or relay buckets were emptied in msec
|
|
||||||
* since midnight. */
|
|
||||||
static uint32_t global_relayed_read_emptied = 0,
|
|
||||||
global_relayed_write_emptied = 0,
|
|
||||||
global_read_emptied = 0,
|
|
||||||
global_write_emptied = 0;
|
|
||||||
|
|
||||||
/** Helper: convert given <b>tvnow</b> time value to milliseconds since
|
/** Helper: convert given <b>tvnow</b> time value to milliseconds since
|
||||||
* midnight. */
|
* midnight. */
|
||||||
static uint32_t
|
static uint32_t
|
||||||
@ -2667,6 +2659,28 @@ msec_since_midnight(const struct timeval *tvnow)
|
|||||||
((uint32_t)tvnow->tv_usec / (uint32_t)1000L));
|
((uint32_t)tvnow->tv_usec / (uint32_t)1000L));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Helper: return the time in milliseconds since <b>last_empty_time</b>
|
||||||
|
* when a bucket ran empty that previously had <b>tokens_before</b> tokens
|
||||||
|
* now has <b>tokens_after</b> tokens after refilling at timestamp
|
||||||
|
* <b>tvnow</b>, capped at <b>milliseconds_elapsed</b> milliseconds since
|
||||||
|
* last refilling that bucket. Return 0 if the bucket has not been empty
|
||||||
|
* since the last refill or has not been refilled. */
|
||||||
|
uint32_t
|
||||||
|
bucket_millis_empty(int tokens_before, uint32_t last_empty_time,
|
||||||
|
int tokens_after, int milliseconds_elapsed,
|
||||||
|
const struct timeval *tvnow)
|
||||||
|
{
|
||||||
|
uint32_t result = 0, refilled;
|
||||||
|
if (tokens_before <= 0 && tokens_after > tokens_before) {
|
||||||
|
refilled = msec_since_midnight(tvnow);
|
||||||
|
result = (uint32_t)((refilled + 86400L * 1000L - last_empty_time) %
|
||||||
|
(86400L * 1000L));
|
||||||
|
if (result > (uint32_t)milliseconds_elapsed)
|
||||||
|
result = (uint32_t)milliseconds_elapsed;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/** Check if a bucket which had <b>tokens_before</b> tokens and which got
|
/** Check if a bucket which had <b>tokens_before</b> tokens and which got
|
||||||
* <b>tokens_removed</b> tokens removed at timestamp <b>tvnow</b> has run
|
* <b>tokens_removed</b> tokens removed at timestamp <b>tvnow</b> has run
|
||||||
* out of tokens, and if so, note the milliseconds since midnight in
|
* out of tokens, and if so, note the milliseconds since midnight in
|
||||||
@ -2680,6 +2694,14 @@ connection_buckets_note_empty_ts(uint32_t *timestamp_var,
|
|||||||
*timestamp_var = msec_since_midnight(tvnow);
|
*timestamp_var = msec_since_midnight(tvnow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef USE_BUFFEREVENTS
|
||||||
|
/** Last time at which the global or relay buckets were emptied in msec
|
||||||
|
* since midnight. */
|
||||||
|
static uint32_t global_relayed_read_emptied = 0,
|
||||||
|
global_relayed_write_emptied = 0,
|
||||||
|
global_read_emptied = 0,
|
||||||
|
global_write_emptied = 0;
|
||||||
|
|
||||||
/** We just read <b>num_read</b> and wrote <b>num_written</b> bytes
|
/** We just read <b>num_read</b> and wrote <b>num_written</b> bytes
|
||||||
* onto <b>conn</b>. Decrement buckets appropriately. */
|
* onto <b>conn</b>. Decrement buckets appropriately. */
|
||||||
static void
|
static void
|
||||||
@ -2838,28 +2860,6 @@ connection_bucket_refill_helper(int *bucket, int rate, int burst,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Helper: return the time in milliseconds since <b>last_empty_time</b>
|
|
||||||
* when a bucket ran empty that previously had <b>tokens_before</b> tokens
|
|
||||||
* now has <b>tokens_after</b> tokens after refilling at timestamp
|
|
||||||
* <b>tvnow</b>, capped at <b>milliseconds_elapsed</b> milliseconds since
|
|
||||||
* last refilling that bucket. Return 0 if the bucket has not been empty
|
|
||||||
* since the last refill or has not been refilled. */
|
|
||||||
uint32_t
|
|
||||||
bucket_millis_empty(int tokens_before, uint32_t last_empty_time,
|
|
||||||
int tokens_after, int milliseconds_elapsed,
|
|
||||||
const struct timeval *tvnow)
|
|
||||||
{
|
|
||||||
uint32_t result = 0, refilled;
|
|
||||||
if (tokens_before <= 0 && tokens_after > tokens_before) {
|
|
||||||
refilled = msec_since_midnight(tvnow);
|
|
||||||
result = (uint32_t)((refilled + 86400L * 1000L - last_empty_time) %
|
|
||||||
(86400L * 1000L));
|
|
||||||
if (result > (uint32_t)milliseconds_elapsed)
|
|
||||||
result = (uint32_t)milliseconds_elapsed;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Time has passed; increment buckets appropriately. */
|
/** Time has passed; increment buckets appropriately. */
|
||||||
void
|
void
|
||||||
connection_bucket_refill(int milliseconds_elapsed, time_t now)
|
connection_bucket_refill(int milliseconds_elapsed, time_t now)
|
||||||
|
Loading…
Reference in New Issue
Block a user