diff --git a/src/rate_limit.c b/src/rate_limit.c index b829b50..2ca92ae 100644 --- a/src/rate_limit.c +++ b/src/rate_limit.c @@ -4,7 +4,13 @@ void uc_ratelimit_init(struct RateLimit *r, long tickets, long period, long current_ts) { r->tickets = tickets; - r->ticket_cost = tickets * period; + + if (tickets > period) { + r->ticket_cost = tickets * period; + } else { + r->ticket_cost = period; + } + r->period = period; r->funds = r->ticket_cost * tickets; r->last_ts = current_ts; @@ -19,8 +25,9 @@ void uc_ratelimit_reset(struct RateLimit *r, long current_ts) { r->funds = r->ticket_cost * r->tickets; - if (current_ts) + if (current_ts) { r->last_ts = current_ts; + } } int uc_ratelimit_allow(struct RateLimit *r, long current_ts) @@ -45,8 +52,9 @@ int uc_ratelimit_allow(struct RateLimit *r, long current_ts) ((r->tickets * r->ticket_cost) / r->period); //throttle handing out tickets - if (r->funds > r->ticket_cost * r->tickets) + if (r->funds > r->ticket_cost * r->tickets) { r->funds = r->ticket_cost * r->tickets; + } //If we have enough to buy atleast one ticket, we can allow if (r->funds >= r->ticket_cost) {