diff options
author | George Kadianakis <desnacked@riseup.net> | 2019-06-11 14:02:33 +0300 |
---|---|---|
committer | George Kadianakis <desnacked@riseup.net> | 2019-06-11 14:02:33 +0300 |
commit | 646f7a9a94db1837f0c4a1c2ab7bc0b10736a82d (patch) | |
tree | 075527b8d30d0d4a070100d400ff9820dd193a00 /src/lib/evloop/token_bucket.h | |
parent | b83dba7cb0dbd96c2be09edab47e6c16491c0a14 (diff) | |
parent | 7cf9d54e6d7a08f169a27f7d76731e61ebe63fb0 (diff) | |
download | tor-646f7a9a94db1837f0c4a1c2ab7bc0b10736a82d.tar.gz tor-646f7a9a94db1837f0c4a1c2ab7bc0b10736a82d.zip |
Merge branch 'ticket30687_042_01'
Diffstat (limited to 'src/lib/evloop/token_bucket.h')
-rw-r--r-- | src/lib/evloop/token_bucket.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/lib/evloop/token_bucket.h b/src/lib/evloop/token_bucket.h index 1ce6f1bf94..dde9bd65a4 100644 --- a/src/lib/evloop/token_bucket.h +++ b/src/lib/evloop/token_bucket.h @@ -103,6 +103,35 @@ token_bucket_rw_get_write(const token_bucket_rw_t *bucket) return token_bucket_raw_get(&bucket->write_bucket); } +/** + * A specialized bucket containing a single counter. + */ + +typedef struct token_bucket_ctr_t { + token_bucket_cfg_t cfg; + token_bucket_raw_t counter; + uint32_t last_refilled_at_timestamp; +} token_bucket_ctr_t; + +void token_bucket_ctr_init(token_bucket_ctr_t *bucket, uint32_t rate, + uint32_t burst, uint32_t now_ts); +void token_bucket_ctr_adjust(token_bucket_ctr_t *bucket, uint32_t rate, + uint32_t burst); +void token_bucket_ctr_reset(token_bucket_ctr_t *bucket, uint32_t now_ts); +void token_bucket_ctr_refill(token_bucket_ctr_t *bucket, uint32_t now_ts); + +static inline bool +token_bucket_ctr_dec(token_bucket_ctr_t *bucket, ssize_t n) +{ + return token_bucket_raw_dec(&bucket->counter, n); +} + +static inline size_t +token_bucket_ctr_get(const token_bucket_ctr_t *bucket) +{ + return token_bucket_raw_get(&bucket->counter); +} + #ifdef TOKEN_BUCKET_PRIVATE /* To avoid making the rates too small, we consider units of "steps", |