summaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
Diffstat (limited to 'src/or')
-rw-r--r--src/or/config.c1
-rw-r--r--src/or/connection.c5
-rw-r--r--src/or/connection_or.c7
3 files changed, 11 insertions, 2 deletions
diff --git a/src/or/config.c b/src/or/config.c
index 5a7a590685..e22f539ade 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -5645,6 +5645,7 @@ init_libevent(const or_options_t *options)
memset(&cfg, 0, sizeof(cfg));
cfg.disable_iocp = options->DisableIOCP;
cfg.num_cpus = get_num_cpus(options);
+ cfg.msec_per_tick = options->TokenBucketRefillInterval;
tor_libevent_initialize(&cfg);
diff --git a/src/or/connection.c b/src/or/connection.c
index cb93a81e4e..9dd92972e1 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -2561,7 +2561,10 @@ connection_bucket_init(void)
burst = options->BandwidthBurst;
}
- rate /= TOR_LIBEVENT_TICKS_PER_SECOND;
+ /* This can't overflow, since TokenBucketRefillInterval <= 1000,
+ * and rate started out less than INT32_MAX. */
+ rate = (rate * options->TokenBucketRefillInterval) / 1000;
+
bucket_cfg = ev_token_bucket_cfg_new((uint32_t)rate, (uint32_t)burst,
(uint32_t)rate, (uint32_t)burst,
tick);
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index a75444e1ed..29f0f8de72 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -580,7 +580,12 @@ connection_or_update_token_buckets_helper(or_connection_t *conn, int reset,
{
const struct timeval *tick = tor_libevent_get_one_tick_timeout();
struct ev_token_bucket_cfg *cfg, *old_cfg;
- int rate_per_tick = rate / TOR_LIBEVENT_TICKS_PER_SECOND;
+ int64_t rate64 = (((int64_t)rate) * options->TokenBucketRefillInterval)
+ / 1000;
+ /* This can't overflow, since TokenBucketRefillInterval <= 1000,
+ * and rate started out less than INT_MAX. */
+ int rate_per_tick = (int) rate64;
+
cfg = ev_token_bucket_cfg_new(rate_per_tick, burst, rate_per_tick,
burst, tick);
old_cfg = conn->bucket_cfg;