mirror of
https://github.com/cuberite/libevent.git
synced 2025-08-04 01:36:23 -04:00
Support negative arguments to _bufferevent_decrement_(read/write)_buckets()
This commit is contained in:
parent
2f51dc0311
commit
c75341b077
@ -189,6 +189,8 @@ ev_token_bucket_cfg_free(struct ev_token_bucket_cfg *cfg)
|
|||||||
|
|
||||||
static int _bev_group_suspend_reading(struct bufferevent_rate_limit_group *g);
|
static int _bev_group_suspend_reading(struct bufferevent_rate_limit_group *g);
|
||||||
static int _bev_group_suspend_writing(struct bufferevent_rate_limit_group *g);
|
static int _bev_group_suspend_writing(struct bufferevent_rate_limit_group *g);
|
||||||
|
static void _bev_group_unsuspend_reading(struct bufferevent_rate_limit_group *g);
|
||||||
|
static void _bev_group_unsuspend_writing(struct bufferevent_rate_limit_group *g);
|
||||||
|
|
||||||
/** Helper: figure out the maximum amount we should write if is_write, or
|
/** Helper: figure out the maximum amount we should write if is_write, or
|
||||||
the maximum amount we should read if is_read. Return that maximum, or
|
the maximum amount we should read if is_read. Return that maximum, or
|
||||||
@ -285,6 +287,10 @@ _bufferevent_decrement_read_buckets(struct bufferevent_private *bev, ev_ssize_t
|
|||||||
if (event_add(&bev->rate_limiting->refill_bucket_event,
|
if (event_add(&bev->rate_limiting->refill_bucket_event,
|
||||||
&bev->rate_limiting->cfg->tick_timeout) < 0)
|
&bev->rate_limiting->cfg->tick_timeout) < 0)
|
||||||
r = -1;
|
r = -1;
|
||||||
|
} else if (bev->read_suspended & BEV_SUSPEND_BW) {
|
||||||
|
if (!(bev->write_suspended & BEV_SUSPEND_BW))
|
||||||
|
event_del(&bev->rate_limiting->refill_bucket_event);
|
||||||
|
bufferevent_unsuspend_read(&bev->bev, BEV_SUSPEND_BW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,6 +300,8 @@ _bufferevent_decrement_read_buckets(struct bufferevent_private *bev, ev_ssize_t
|
|||||||
bev->rate_limiting->group->total_read += bytes;
|
bev->rate_limiting->group->total_read += bytes;
|
||||||
if (bev->rate_limiting->group->rate_limit.read_limit <= 0) {
|
if (bev->rate_limiting->group->rate_limit.read_limit <= 0) {
|
||||||
_bev_group_suspend_reading(bev->rate_limiting->group);
|
_bev_group_suspend_reading(bev->rate_limiting->group);
|
||||||
|
} else if (bev->rate_limiting->group->read_suspended) {
|
||||||
|
_bev_group_unsuspend_reading(bev->rate_limiting->group);
|
||||||
}
|
}
|
||||||
UNLOCK_GROUP(bev->rate_limiting->group);
|
UNLOCK_GROUP(bev->rate_limiting->group);
|
||||||
}
|
}
|
||||||
@ -317,6 +325,10 @@ _bufferevent_decrement_write_buckets(struct bufferevent_private *bev, ev_ssize_t
|
|||||||
if (event_add(&bev->rate_limiting->refill_bucket_event,
|
if (event_add(&bev->rate_limiting->refill_bucket_event,
|
||||||
&bev->rate_limiting->cfg->tick_timeout) < 0)
|
&bev->rate_limiting->cfg->tick_timeout) < 0)
|
||||||
r = -1;
|
r = -1;
|
||||||
|
} else if (bev->write_suspended & BEV_SUSPEND_BW) {
|
||||||
|
if (!(bev->read_suspended & BEV_SUSPEND_BW))
|
||||||
|
event_del(&bev->rate_limiting->refill_bucket_event);
|
||||||
|
bufferevent_unsuspend_write(&bev->bev, BEV_SUSPEND_BW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,6 +338,8 @@ _bufferevent_decrement_write_buckets(struct bufferevent_private *bev, ev_ssize_t
|
|||||||
bev->rate_limiting->group->total_written += bytes;
|
bev->rate_limiting->group->total_written += bytes;
|
||||||
if (bev->rate_limiting->group->rate_limit.write_limit <= 0) {
|
if (bev->rate_limiting->group->rate_limit.write_limit <= 0) {
|
||||||
_bev_group_suspend_writing(bev->rate_limiting->group);
|
_bev_group_suspend_writing(bev->rate_limiting->group);
|
||||||
|
} else if (bev->rate_limiting->group->write_suspended) {
|
||||||
|
_bev_group_unsuspend_writing(bev->rate_limiting->group);
|
||||||
}
|
}
|
||||||
UNLOCK_GROUP(bev->rate_limiting->group);
|
UNLOCK_GROUP(bev->rate_limiting->group);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user