Use LIST rather than TAILQ for bufferevent_rate_limit_group members

Once again, there's no reason to keep these lists in the order we were
keeping them in.  Every time we needed to traverse them for any important
purpose, we started at a random point anyway.
This commit is contained in:
Nick Mathewson 2010-04-09 20:05:12 -04:00
parent d313c29349
commit 974d004eea
2 changed files with 14 additions and 14 deletions

View File

@ -59,7 +59,7 @@ extern "C" {
struct bufferevent_rate_limit_group {
/** List of all members in the group */
TAILQ_HEAD(rlim_group_member_list, bufferevent_private) members;
LIST_HEAD(rlim_group_member_list, bufferevent_private) members;
/** Current limits for the group. */
struct ev_token_bucket rate_limit;
struct ev_token_bucket_cfg rate_limit_cfg;
@ -108,7 +108,7 @@ struct bufferevent_rate_limit {
*
* Note that this field is supposed to be protected by the group
* lock */
TAILQ_ENTRY(bufferevent_private) next_in_group;
LIST_ENTRY(bufferevent_private) next_in_group;
/** The rate-limiting group for this bufferevent, or NULL if it is
* only rate-limited on its own. */
struct bufferevent_rate_limit_group *group;

View File

@ -339,7 +339,7 @@ _bev_group_suspend_reading(struct bufferevent_rate_limit_group *g)
bufferevent, it will find out later when it looks at its limit
and sees that its group is suspended.
*/
TAILQ_FOREACH(bev, &g->members, rate_limiting->next_in_group) {
LIST_FOREACH(bev, &g->members, rate_limiting->next_in_group) {
if (EVLOCK_TRY_LOCK(bev->lock)) {
bufferevent_suspend_read(&bev->bev,
BEV_SUSPEND_BW_GROUP);
@ -357,7 +357,7 @@ _bev_group_suspend_writing(struct bufferevent_rate_limit_group *g)
struct bufferevent_private *bev;
g->write_suspended = 1;
g->pending_unsuspend_write = 0;
TAILQ_FOREACH(bev, &g->members, rate_limiting->next_in_group) {
LIST_FOREACH(bev, &g->members, rate_limiting->next_in_group) {
if (EVLOCK_TRY_LOCK(bev->lock)) {
bufferevent_suspend_write(&bev->bev,
BEV_SUSPEND_BW_GROUP);
@ -429,13 +429,13 @@ _bev_group_random_element(struct bufferevent_rate_limit_group *group)
if (!group->n_members)
return NULL;
EVUTIL_ASSERT(! TAILQ_EMPTY(&group->members));
EVUTIL_ASSERT(! LIST_EMPTY(&group->members));
which = _evutil_weakrand() % group->n_members;
bev = TAILQ_FIRST(&group->members);
bev = LIST_FIRST(&group->members);
while (which--)
bev = TAILQ_NEXT(bev, rate_limiting->next_in_group);
bev = LIST_NEXT(bev, rate_limiting->next_in_group);
return bev;
}
@ -450,12 +450,12 @@ _bev_group_random_element(struct bufferevent_rate_limit_group *group)
#define FOREACH_RANDOM_ORDER(block) \
do { \
first = _bev_group_random_element(g); \
for (bev = first; bev != TAILQ_END(&g->members); \
bev = TAILQ_NEXT(bev, rate_limiting->next_in_group)) { \
for (bev = first; bev != LIST_END(&g->members); \
bev = LIST_NEXT(bev, rate_limiting->next_in_group)) { \
block ; \
} \
for (bev = TAILQ_FIRST(&g->members); bev && bev != first; \
bev = TAILQ_NEXT(bev, rate_limiting->next_in_group)) { \
for (bev = LIST_FIRST(&g->members); bev && bev != first; \
bev = LIST_NEXT(bev, rate_limiting->next_in_group)) { \
block ; \
} \
} while (0)
@ -602,7 +602,7 @@ bufferevent_rate_limit_group_new(struct event_base *base,
if (!g)
return NULL;
memcpy(&g->rate_limit_cfg, cfg, sizeof(g->rate_limit_cfg));
TAILQ_INIT(&g->members);
LIST_INIT(&g->members);
ev_token_bucket_init(&g->rate_limit, cfg, tick, 0);
@ -687,7 +687,7 @@ bufferevent_add_to_rate_limit_group(struct bufferevent *bev,
LOCK_GROUP(g);
bevp->rate_limiting->group = g;
++g->n_members;
TAILQ_INSERT_TAIL(&g->members, bevp, rate_limiting->next_in_group);
LIST_INSERT_HEAD(&g->members, bevp, rate_limiting->next_in_group);
rsuspend = g->read_suspended;
wsuspend = g->write_suspended;
@ -715,7 +715,7 @@ bufferevent_remove_from_rate_limit_group(struct bufferevent *bev)
LOCK_GROUP(g);
bevp->rate_limiting->group = NULL;
--g->n_members;
TAILQ_REMOVE(&g->members, bevp, rate_limiting->next_in_group);
LIST_REMOVE(bevp, rate_limiting->next_in_group);
UNLOCK_GROUP(g);
}
bufferevent_unsuspend_read(bev, BEV_SUSPEND_BW_GROUP);