mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-11 05:14:46 -04:00
Use LIST rather than TAILQ for evmap_io and evmap_signal
These structures used TAILQ for the lists of events waiting on a single fd or signal. But order doesn't matter for these lists; only the order of the active events lists actually matters.
This commit is contained in:
parent
f9db33d15d
commit
6494772e32
26
evmap.c
26
evmap.c
@ -55,7 +55,7 @@
|
|||||||
write on a given fd, and the number of each.
|
write on a given fd, and the number of each.
|
||||||
*/
|
*/
|
||||||
struct evmap_io {
|
struct evmap_io {
|
||||||
struct event_list events;
|
struct event_dlist events;
|
||||||
ev_uint16_t nread;
|
ev_uint16_t nread;
|
||||||
ev_uint16_t nwrite;
|
ev_uint16_t nwrite;
|
||||||
};
|
};
|
||||||
@ -63,7 +63,7 @@ struct evmap_io {
|
|||||||
/* An entry for an evmap_signal list: notes all the events that want to know
|
/* An entry for an evmap_signal list: notes all the events that want to know
|
||||||
when a signal triggers. */
|
when a signal triggers. */
|
||||||
struct evmap_signal {
|
struct evmap_signal {
|
||||||
struct event_list events;
|
struct event_dlist events;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* On some platforms, fds start at 0 and increment by 1 as they are
|
/* On some platforms, fds start at 0 and increment by 1 as they are
|
||||||
@ -248,7 +248,7 @@ evmap_signal_clear(struct event_signal_map *ctx)
|
|||||||
static void
|
static void
|
||||||
evmap_io_init(struct evmap_io *entry)
|
evmap_io_init(struct evmap_io *entry)
|
||||||
{
|
{
|
||||||
TAILQ_INIT(&entry->events);
|
LIST_INIT(&entry->events);
|
||||||
entry->nread = 0;
|
entry->nread = 0;
|
||||||
entry->nwrite = 0;
|
entry->nwrite = 0;
|
||||||
}
|
}
|
||||||
@ -314,7 +314,7 @@ evmap_io_add(struct event_base *base, evutil_socket_t fd, struct event *ev)
|
|||||||
|
|
||||||
ctx->nread = (ev_uint16_t) nread;
|
ctx->nread = (ev_uint16_t) nread;
|
||||||
ctx->nwrite = (ev_uint16_t) nwrite;
|
ctx->nwrite = (ev_uint16_t) nwrite;
|
||||||
TAILQ_INSERT_TAIL(&ctx->events, ev, ev_io_next);
|
LIST_INSERT_HEAD(&ctx->events, ev, ev_io_next);
|
||||||
|
|
||||||
return (retval);
|
return (retval);
|
||||||
}
|
}
|
||||||
@ -370,7 +370,7 @@ evmap_io_del(struct event_base *base, evutil_socket_t fd, struct event *ev)
|
|||||||
|
|
||||||
ctx->nread = nread;
|
ctx->nread = nread;
|
||||||
ctx->nwrite = nwrite;
|
ctx->nwrite = nwrite;
|
||||||
TAILQ_REMOVE(&ctx->events, ev, ev_io_next);
|
LIST_REMOVE(ev, ev_io_next);
|
||||||
|
|
||||||
return (retval);
|
return (retval);
|
||||||
}
|
}
|
||||||
@ -388,7 +388,7 @@ evmap_io_active(struct event_base *base, evutil_socket_t fd, short events)
|
|||||||
GET_IO_SLOT(ctx, io, fd, evmap_io);
|
GET_IO_SLOT(ctx, io, fd, evmap_io);
|
||||||
|
|
||||||
EVUTIL_ASSERT(ctx);
|
EVUTIL_ASSERT(ctx);
|
||||||
TAILQ_FOREACH(ev, &ctx->events, ev_io_next) {
|
LIST_FOREACH(ev, &ctx->events, ev_io_next) {
|
||||||
if (ev->ev_events & events)
|
if (ev->ev_events & events)
|
||||||
event_active_nolock(ev, ev->ev_events & events, 1);
|
event_active_nolock(ev, ev->ev_events & events, 1);
|
||||||
}
|
}
|
||||||
@ -399,7 +399,7 @@ evmap_io_active(struct event_base *base, evutil_socket_t fd, short events)
|
|||||||
static void
|
static void
|
||||||
evmap_signal_init(struct evmap_signal *entry)
|
evmap_signal_init(struct evmap_signal *entry)
|
||||||
{
|
{
|
||||||
TAILQ_INIT(&entry->events);
|
LIST_INIT(&entry->events);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -418,13 +418,13 @@ evmap_signal_add(struct event_base *base, int sig, struct event *ev)
|
|||||||
GET_SIGNAL_SLOT_AND_CTOR(ctx, map, sig, evmap_signal, evmap_signal_init,
|
GET_SIGNAL_SLOT_AND_CTOR(ctx, map, sig, evmap_signal, evmap_signal_init,
|
||||||
base->evsigsel->fdinfo_len);
|
base->evsigsel->fdinfo_len);
|
||||||
|
|
||||||
if (TAILQ_EMPTY(&ctx->events)) {
|
if (LIST_EMPTY(&ctx->events)) {
|
||||||
if (evsel->add(base, ev->ev_fd, 0, EV_SIGNAL, NULL)
|
if (evsel->add(base, ev->ev_fd, 0, EV_SIGNAL, NULL)
|
||||||
== -1)
|
== -1)
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
TAILQ_INSERT_TAIL(&ctx->events, ev, ev_signal_next);
|
LIST_INSERT_HEAD(&ctx->events, ev, ev_signal_next);
|
||||||
|
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
@ -441,13 +441,13 @@ evmap_signal_del(struct event_base *base, int sig, struct event *ev)
|
|||||||
|
|
||||||
GET_SIGNAL_SLOT(ctx, map, sig, evmap_signal);
|
GET_SIGNAL_SLOT(ctx, map, sig, evmap_signal);
|
||||||
|
|
||||||
if (TAILQ_FIRST(&ctx->events) == TAILQ_LAST(&ctx->events, event_list)) {
|
LIST_REMOVE(ev, ev_signal_next);
|
||||||
|
|
||||||
|
if (LIST_FIRST(&ctx->events) == NULL) {
|
||||||
if (evsel->del(base, ev->ev_fd, 0, EV_SIGNAL, NULL) == -1)
|
if (evsel->del(base, ev->ev_fd, 0, EV_SIGNAL, NULL) == -1)
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
TAILQ_REMOVE(&ctx->events, ev, ev_signal_next);
|
|
||||||
|
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -461,7 +461,7 @@ evmap_signal_active(struct event_base *base, evutil_socket_t sig, int ncalls)
|
|||||||
EVUTIL_ASSERT(sig < map->nentries);
|
EVUTIL_ASSERT(sig < map->nentries);
|
||||||
GET_SIGNAL_SLOT(ctx, map, sig, evmap_signal);
|
GET_SIGNAL_SLOT(ctx, map, sig, evmap_signal);
|
||||||
|
|
||||||
TAILQ_FOREACH(ev, &ctx->events, ev_signal_next)
|
LIST_FOREACH(ev, &ctx->events, ev_signal_next)
|
||||||
event_active_nolock(ev, EV_SIGNAL, ncalls);
|
event_active_nolock(ev, EV_SIGNAL, ncalls);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,13 +95,13 @@ struct event {
|
|||||||
union {
|
union {
|
||||||
/* used for io events */
|
/* used for io events */
|
||||||
struct {
|
struct {
|
||||||
TAILQ_ENTRY (event) (ev_io_next);
|
LIST_ENTRY (event) (ev_io_next);
|
||||||
struct timeval ev_timeout;
|
struct timeval ev_timeout;
|
||||||
} ev_io;
|
} ev_io;
|
||||||
|
|
||||||
/* used by signal events */
|
/* used by signal events */
|
||||||
struct {
|
struct {
|
||||||
TAILQ_ENTRY (event) (ev_signal_next);
|
LIST_ENTRY (event) (ev_signal_next);
|
||||||
short ev_ncalls;
|
short ev_ncalls;
|
||||||
/* Allows deletes in callback */
|
/* Allows deletes in callback */
|
||||||
short *ev_pncalls;
|
short *ev_pncalls;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user