Ensure that global buckets are updated on configuration change

This commit is contained in:
Nick Mathewson 2018-04-10 13:40:34 -04:00
parent a38fd9bc5b
commit 6be994fa71
3 changed files with 27 additions and 1 deletions

View File

@ -2219,6 +2219,12 @@ options_act(const or_options_t *old_options)
options->PerConnBWBurst != old_options->PerConnBWBurst)
connection_or_update_token_buckets(get_connection_array(), options);
if (options->BandwidthRate != old_options->BandwidthRate ||
options->BandwidthBurst != old_options->BandwidthBurst ||
options->BandwidthRate != old_options->BandwidthRate ||
options->RelayBandwidthBurst != old_options->RelayBandwidthBurst)
connection_bucket_adjust(options);
if (options->MainloopStats != old_options->MainloopStats) {
reset_main_loop_counters();
}

View File

@ -3104,7 +3104,8 @@ connection_consider_empty_write_buckets(connection_t *conn)
connection_stop_writing(conn);
}
/** Initialize the global read bucket to options-\>BandwidthBurst. */
/** Initialize the global buckets to the values configured in the
* options */
void
connection_bucket_init(void)
{
@ -3127,6 +3128,24 @@ connection_bucket_init(void)
}
}
/** Update the global connection bucket settings to a new value. */
void
connection_bucket_adjust(const or_options_t *options)
{
token_bucket_adjust(&global_bucket,
(int32_t)options->BandwidthRate,
(int32_t)options->BandwidthBurst);
if (options->RelayBandwidthRate) {
token_bucket_adjust(&global_relayed_bucket,
(int32_t)options->RelayBandwidthRate,
(int32_t)options->RelayBandwidthBurst);
} else {
token_bucket_adjust(&global_relayed_bucket,
(int32_t)options->BandwidthRate,
(int32_t)options->BandwidthBurst);
}
}
/** Time has passed; increment buckets appropriately. */
void
connection_bucket_refill(time_t now, uint32_t now_ts)

View File

@ -122,6 +122,7 @@ void connection_mark_all_noncontrol_connections(void);
ssize_t 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_adjust(const or_options_t *options);
void connection_bucket_refill(time_t now,
uint32_t now_ts);