mirror of
https://github.com/cuberite/libevent.git
synced 2025-08-04 01:36:23 -04:00
Make rate limiting work with common_timeout logic
This commit is contained in:
parent
6736852eaa
commit
5b18f13048
@ -43,6 +43,7 @@
|
||||
#include "bufferevent-internal.h"
|
||||
#include "mm-internal.h"
|
||||
#include "util-internal.h"
|
||||
#include "event-internal.h"
|
||||
|
||||
int
|
||||
ev_token_bucket_init(struct ev_token_bucket *bucket,
|
||||
@ -165,7 +166,8 @@ ev_token_bucket_cfg_new(size_t read_rate, size_t read_burst,
|
||||
r->read_maximum = read_burst;
|
||||
r->write_maximum = write_burst;
|
||||
memcpy(&r->tick_timeout, tick_len, sizeof(struct timeval));
|
||||
r->msec_per_tick = (tick_len->tv_sec * 1000) + tick_len->tv_usec/1000;
|
||||
r->msec_per_tick = (tick_len->tv_sec * 1000) +
|
||||
(tick_len->tv_usec & COMMON_TIMEOUT_MICROSECONDS_MASK)/1000;
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -518,6 +520,7 @@ _bev_group_refill_callback(evutil_socket_t fd, short what, void *arg)
|
||||
event_base_gettimeofday_cached(event_get_base(&g->master_refill_event), &now);
|
||||
|
||||
LOCK_GROUP(g);
|
||||
|
||||
tick = ev_token_bucket_get_tick(&now, &g->rate_limit_cfg);
|
||||
ev_token_bucket_update(&g->rate_limit, &g->rate_limit_cfg, tick);
|
||||
|
||||
|
@ -146,6 +146,9 @@ struct common_timeout_list {
|
||||
struct event_base *base;
|
||||
};
|
||||
|
||||
/** Mask used to get the real tv_usec value from a common timeout. */
|
||||
#define COMMON_TIMEOUT_MICROSECONDS_MASK 0x000fffff
|
||||
|
||||
struct event_change;
|
||||
|
||||
/* List of 'changes' since the last call to eventop.dispatch. Only maintained
|
||||
|
2
event.c
2
event.c
@ -1057,7 +1057,7 @@ event_signal_closure(struct event_base *base, struct event *ev)
|
||||
* of index into the event_base's aray of common timeouts.
|
||||
*/
|
||||
|
||||
#define MICROSECONDS_MASK 0x000fffff
|
||||
#define MICROSECONDS_MASK COMMON_TIMEOUT_MICROSECONDS_MASK
|
||||
#define COMMON_TIMEOUT_IDX_MASK 0x0ff00000
|
||||
#define COMMON_TIMEOUT_IDX_SHIFT 20
|
||||
#define COMMON_TIMEOUT_MASK 0xf0000000
|
||||
|
Loading…
x
Reference in New Issue
Block a user