Move per-fd info from eventops into evmap. Not done for win32.c yet.

svn:r1008
This commit is contained in:
Nick Mathewson 2009-01-14 20:52:32 +00:00
parent 3552ac1eb3
commit 554e14934e
10 changed files with 104 additions and 84 deletions

View File

@ -62,8 +62,8 @@ struct devpollop {
}; };
static void *devpoll_init (struct event_base *); static void *devpoll_init (struct event_base *);
static int devpoll_add(struct event_base *, int fd, short old, short events); static int devpoll_add(struct event_base *, int fd, short old, short events, void *);
static int devpoll_del(struct event_base *, int fd, short old, short events); static int devpoll_del(struct event_base *, int fd, short old, short events, void *);
static int devpoll_dispatch (struct event_base *, struct timeval *); static int devpoll_dispatch (struct event_base *, struct timeval *);
static void devpoll_dealloc (struct event_base *); static void devpoll_dealloc (struct event_base *);
@ -76,6 +76,7 @@ const struct eventop devpollops = {
devpoll_dealloc, devpoll_dealloc,
1, /* need reinit */ 1, /* need reinit */
EV_FEATURE_FDS|EV_FEATURE_O1, EV_FEATURE_FDS|EV_FEATURE_O1,
0
}; };
#define NEVENT 32000 #define NEVENT 32000
@ -228,11 +229,12 @@ devpoll_dispatch(struct event_base *base, struct timeval *tv)
static int static int
devpoll_add(struct event_base *base, int fd, short old, short events) devpoll_add(struct event_base *base, int fd, short old, short events, void *p)
{ {
struct devpollop *devpollop = base->evbase; struct devpollop *devpollop = base->evbase;
struct evdevpoll *evdp; struct evdevpoll *evdp;
int events; int events;
(void)p;
/* /*
* It's not necessary to OR the existing read/write events that we * It's not necessary to OR the existing read/write events that we
@ -254,12 +256,13 @@ devpoll_add(struct event_base *base, int fd, short old, short events)
} }
static int static int
devpoll_del(struct event_base *base, int fd, short old, short events) devpoll_del(struct event_base *base, int fd, short old, short events, void *p)
{ {
struct devpollop *devpollop = base->evbase; struct devpollop *devpollop = base->evbase;
struct evdevpoll *evdp; struct evdevpoll *evdp;
int events; int events;
int needwritedelete = 1, needreaddelete = 1; int needwritedelete = 1, needreaddelete = 1;
(void)p;
events = 0; events = 0;
if (events & EV_READ) if (events & EV_READ)

11
epoll.c
View File

@ -60,8 +60,8 @@ struct epollop {
}; };
static void *epoll_init (struct event_base *); static void *epoll_init (struct event_base *);
static int epoll_add(struct event_base *, int fd, short old, short events); static int epoll_add(struct event_base *, int fd, short old, short events, void *);
static int epoll_del(struct event_base *, int fd, short old, short events); static int epoll_del(struct event_base *, int fd, short old, short events, void *);
static int epoll_dispatch (struct event_base *, struct timeval *); static int epoll_dispatch (struct event_base *, struct timeval *);
static void epoll_dealloc (struct event_base *); static void epoll_dealloc (struct event_base *);
@ -74,6 +74,7 @@ const struct eventop epollops = {
epoll_dealloc, epoll_dealloc,
1, /* need reinit */ 1, /* need reinit */
EV_FEATURE_ET|EV_FEATURE_O1, EV_FEATURE_ET|EV_FEATURE_O1,
0
}; };
#ifdef HAVE_SETFD #ifdef HAVE_SETFD
@ -195,11 +196,12 @@ epoll_dispatch(struct event_base *base, struct timeval *tv)
} }
static int static int
epoll_add(struct event_base *base, int fd, short old, short events) epoll_add(struct event_base *base, int fd, short old, short events, void *p)
{ {
struct epollop *epollop = base->evbase; struct epollop *epollop = base->evbase;
struct epoll_event epev = {0, {0}}; struct epoll_event epev = {0, {0}};
int op, res; int op, res;
(void)p;
op = EPOLL_CTL_ADD; op = EPOLL_CTL_ADD;
res = 0; res = 0;
@ -224,11 +226,12 @@ epoll_add(struct event_base *base, int fd, short old, short events)
} }
static int static int
epoll_del(struct event_base *base, int fd, short old, short events) epoll_del(struct event_base *base, int fd, short old, short events, void *p)
{ {
struct epollop *epollop = base->evbase; struct epollop *epollop = base->evbase;
struct epoll_event epev = {0, {0}}; struct epoll_event epev = {0, {0}};
int res, op; int res, op;
(void) p;
op = EPOLL_CTL_DEL; op = EPOLL_CTL_DEL;

View File

@ -49,13 +49,14 @@ extern "C" {
struct eventop { struct eventop {
const char *name; const char *name;
void *(*init)(struct event_base *); void *(*init)(struct event_base *);
int (*add)(struct event_base *, evutil_socket_t fd, short old, short events); int (*add)(struct event_base *, evutil_socket_t fd, short old, short events, void *fdinfo);
int (*del)(struct event_base *, evutil_socket_t fd, short old, short events); int (*del)(struct event_base *, evutil_socket_t fd, short old, short events, void *fdinfo);
int (*dispatch)(struct event_base *, struct timeval *); int (*dispatch)(struct event_base *, struct timeval *);
void (*dealloc)(struct event_base *); void (*dealloc)(struct event_base *);
/* set if we need to reinitialize the event base */ /* set if we need to reinitialize the event base */
int need_reinit; int need_reinit;
enum event_method_feature features; enum event_method_feature features;
size_t fdinfo_len;
}; };
#ifdef WIN32 #ifdef WIN32

View File

@ -79,4 +79,6 @@ int evmap_signal_add(struct event_base *base, int signum, struct event *ev);
int evmap_signal_del(struct event_base *base, int signum, struct event *ev); int evmap_signal_del(struct event_base *base, int signum, struct event *ev);
void evmap_signal_active(struct event_base *base, int fd, int ncalls); void evmap_signal_active(struct event_base *base, int fd, int ncalls);
void *evmap_io_get_fdinfo(struct event_io_map *ctx, evutil_socket_t fd);
#endif /* _EVMAP_H_ */ #endif /* _EVMAP_H_ */

55
evmap.c
View File

@ -113,10 +113,10 @@ HT_GENERATE(event_io_map, event_map_entry, map_node, hashsocket, eqsocket,
struct event_map_entry _key, *_ent; \ struct event_map_entry _key, *_ent; \
_key.fd = slot; \ _key.fd = slot; \
_ent = HT_FIND(event_io_map, map, &_key); \ _ent = HT_FIND(event_io_map, map, &_key); \
(x) = &_ent->ent.type; \ (x) = _ent ? &_ent->ent.type : NULL; \
} while (0); } while (0);
#define GET_IO_SLOT_AND_CTOR(x, map, slot, type, ctor) \ #define GET_IO_SLOT_AND_CTOR(x, map, slot, type, ctor, fdinfo_len) \
do { \ do { \
struct event_map_entry _key, *_ent; \ struct event_map_entry _key, *_ent; \
_key.fd = slot; \ _key.fd = slot; \
@ -126,7 +126,7 @@ HT_GENERATE(event_io_map, event_map_entry, map_node, hashsocket, eqsocket,
_ent = *ptr; \ _ent = *ptr; \
}, \ }, \
{ \ { \
_ent = mm_malloc(sizeof(struct event_map_entry)); \ _ent = mm_calloc(1,sizeof(struct event_map_entry)+fdinfo_len); \
assert(_ent); \ assert(_ent); \
_ent->fd = slot; \ _ent->fd = slot; \
(ctor)(&_ent->ent.type); \ (ctor)(&_ent->ent.type); \
@ -160,23 +160,24 @@ void evmap_io_clear(struct event_io_map *ctx)
by allocating enough memory for a 'struct type', and initializing the new by allocating enough memory for a 'struct type', and initializing the new
value by calling the function 'ctor' on it. value by calling the function 'ctor' on it.
*/ */
#define GET_SIGNAL_SLOT_AND_CTOR(x, map, slot, type, ctor) \ #define GET_SIGNAL_SLOT_AND_CTOR(x, map, slot, type, ctor, fdinfo_len) \
do { \ do { \
if ((map)->entries[slot] == NULL) { \ if ((map)->entries[slot] == NULL) { \
assert(ctor != NULL); \ assert(ctor != NULL); \
(map)->entries[slot]=mm_malloc(sizeof(struct type)); \ (map)->entries[slot]=mm_calloc(1,sizeof(struct type)+fdinfo_len);\
assert((map)->entries[slot] != NULL); \ assert((map)->entries[slot] != NULL); \
(ctor)((struct type *)(map)->entries[slot]); \ (ctor)((struct type *)(map)->entries[slot]); \
} \ } \
(x) = (struct type *)((map)->entries[slot]); \ (x) = (struct type *)((map)->entries[slot]); \
} while (0) } while (0)
/* If we aren't using hashtables, then define the IO_SLOT macros and functions /* If we aren't using hashtables, then define the IO_SLOT macros and functions
as thin aliases over the SIGNAL_SLOT versions. */ as thin aliases over the SIGNAL_SLOT versions. */
#ifndef EVMAP_USE_HT #ifndef EVMAP_USE_HT
#define GET_IO_SLOT(x,map,slot,type) GET_SIGNAL_SLOT(x,map,slot,type) #define GET_IO_SLOT(x,map,slot,type) GET_SIGNAL_SLOT(x,map,slot,type)
#define GET_IO_SLOT_AND_CTOR(x,map,slot,type,ctor) \ #define GET_IO_SLOT_AND_CTOR(x,map,slot,type,ctor,fdinfo_len) \
GET_SIGNAL_SLOT_AND_CTOR(x,map,slot,type,ctor) GET_SIGNAL_SLOT_AND_CTOR(x,map,slot,type,ctor,fdinfo_len)
#define FDINFO_OFFSET sizeof(struct evmap_io)
void void
evmap_io_initmap(struct event_io_map* ctx) evmap_io_initmap(struct event_io_map* ctx)
{ {
@ -271,7 +272,8 @@ evmap_io_add(struct event_base *base, int fd, struct event *ev)
return (-1); return (-1);
} }
#endif #endif
GET_IO_SLOT_AND_CTOR(ctx, io, fd, evmap_io, evmap_io_init); GET_IO_SLOT_AND_CTOR(ctx, io, fd, evmap_io, evmap_io_init,
evsel->fdinfo_len);
nread = ctx->nread; nread = ctx->nread;
nwrite = ctx->nwrite; nwrite = ctx->nwrite;
@ -291,11 +293,12 @@ evmap_io_add(struct event_base *base, int fd, struct event *ev)
} }
if (res) { if (res) {
void *extra = ((char*)ctx) + sizeof(struct evmap_io);
/* XXX(niels): we cannot mix edge-triggered and /* XXX(niels): we cannot mix edge-triggered and
* level-triggered, we should probably assert on * level-triggered, we should probably assert on
* this. */ * this. */
if (evsel->add(base, ev->ev_fd, if (evsel->add(base, ev->ev_fd,
old, (ev->ev_events & EV_ET) | res) == -1) old, (ev->ev_events & EV_ET) | res, extra) == -1)
return (-1); return (-1);
} }
@ -346,7 +349,8 @@ evmap_io_del(struct event_base *base, int fd, struct event *ev)
} }
if (res) { if (res) {
if (evsel->del(base, ev->ev_fd, old, res) == -1) void *extra = ((char*)ctx) + sizeof(struct evmap_io);
if (evsel->del(base, ev->ev_fd, old, res, extra) == -1)
return (-1); return (-1);
} }
@ -397,10 +401,10 @@ evmap_signal_add(struct event_base *base, int sig, struct event *ev)
map, sig, sizeof(struct evmap_signal *)) == -1) map, sig, sizeof(struct evmap_signal *)) == -1)
return (-1); return (-1);
} }
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, 0);
if (TAILQ_EMPTY(&ctx->events)) { if (TAILQ_EMPTY(&ctx->events)) {
if (evsel->add(base, EVENT_SIGNAL(ev), 0, EV_SIGNAL) == -1) if (evsel->add(base, EVENT_SIGNAL(ev), 0, EV_SIGNAL, NULL) == -1)
return (-1); return (-1);
} }
@ -422,7 +426,7 @@ 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)) { if (TAILQ_FIRST(&ctx->events) == TAILQ_LAST(&ctx->events, event_list)) {
if (evsel->del(base, EVENT_SIGNAL(ev), 0, EV_SIGNAL) == -1) if (evsel->del(base, EVENT_SIGNAL(ev), 0, EV_SIGNAL, NULL) == -1)
return (-1); return (-1);
} }
@ -444,3 +448,14 @@ evmap_signal_active(struct event_base *base, int sig, int ncalls)
TAILQ_FOREACH(ev, &ctx->events, ev_signal_next) TAILQ_FOREACH(ev, &ctx->events, ev_signal_next)
event_active(ev, EV_SIGNAL, ncalls); event_active(ev, EV_SIGNAL, ncalls);
} }
void *
evmap_io_get_fdinfo(struct event_io_map *map, evutil_socket_t fd)
{
struct evmap_io *ctx;
GET_IO_SLOT(ctx, map, fd, evmap_io);
if (ctx)
return ((char*)ctx) + sizeof(struct evmap_io);
else
return NULL;
}

View File

@ -114,8 +114,8 @@ struct evport_data {
}; };
static void* evport_init (struct event_base *); static void* evport_init (struct event_base *);
static int evport_add(struct event_base *, int fd, short old, short events); static int evport_add(struct event_base *, int fd, short old, short events, void *);
static int evport_del(struct event_base *, int fd, short old, short events); static int evport_del(struct event_base *, int fd, short old, short events, void *);
static int evport_dispatch (struct event_base *, struct timeval *); static int evport_dispatch (struct event_base *, struct timeval *);
static void evport_dealloc (struct event_base *); static void evport_dealloc (struct event_base *);
@ -126,7 +126,8 @@ const struct eventop evportops = {
evport_del, evport_del,
evport_dispatch, evport_dispatch,
evport_dealloc, evport_dealloc,
1 /* need reinit */ 1, /* need reinit */
0
}; };
/* /*
@ -358,11 +359,12 @@ evport_dispatch(struct event_base *base, struct timeval *tv)
*/ */
static int static int
evport_add(struct event_base *base, int fd, short old, short events) evport_add(struct event_base *base, int fd, short old, short events, void *p)
{ {
struct evport_data *evpd = base->evbase; struct evport_data *evpd = base->evbase;
struct fd_info *fdi; struct fd_info *fdi;
int factor; int factor;
(void)p;
check_evportop(evpd); check_evportop(evpd);
@ -391,12 +393,13 @@ evport_add(struct event_base *base, int fd, short old, short events)
*/ */
static int static int
evport_del(struct event_base *base, int fd, short old, short events) evport_del(struct event_base *base, int fd, short old, short events, void *p)
{ {
struct evport_data *evpd = base->evbase; struct evport_data *evpd = base->evbase;
struct fd_info *fdi; struct fd_info *fdi;
int i; int i;
int associated = 1; int associated = 1;
(void)p;
check_evportop(evpd); check_evportop(evpd);

View File

@ -74,8 +74,8 @@ struct kqop {
}; };
static void *kq_init (struct event_base *); static void *kq_init (struct event_base *);
static int kq_add (struct event_base *, int, short, short); static int kq_add (struct event_base *, int, short, short, void *);
static int kq_del (struct event_base *, int, short, short); static int kq_del (struct event_base *, int, short, short, void *);
static int kq_sig_add (struct event_base *, int, short, short); static int kq_sig_add (struct event_base *, int, short, short);
static int kq_sig_del (struct event_base *, int, short, short); static int kq_sig_del (struct event_base *, int, short, short);
static int kq_dispatch (struct event_base *, struct timeval *); static int kq_dispatch (struct event_base *, struct timeval *);
@ -91,6 +91,7 @@ const struct eventop kqops = {
kq_dealloc, kq_dealloc,
1 /* need reinit */, 1 /* need reinit */,
EV_FEATURE_ET|EV_FEATURE_O1|EV_FEATURE_FDS, EV_FEATURE_ET|EV_FEATURE_O1|EV_FEATURE_FDS,
0
}; };
static const struct eventop kqsigops = { static const struct eventop kqsigops = {
@ -101,6 +102,7 @@ static const struct eventop kqsigops = {
NULL, NULL,
NULL, NULL,
1 /* need reinit */, 1 /* need reinit */,
0,
0 0
}; };
@ -292,10 +294,11 @@ kq_dispatch(struct event_base *base, struct timeval *tv)
static int static int
kq_add(struct event_base *base, int fd, short old, short events) kq_add(struct event_base *base, int fd, short old, short events, void *p)
{ {
struct kqop *kqop = base->evbase; struct kqop *kqop = base->evbase;
struct kevent kev; struct kevent kev;
(void) p;
if (events & EV_READ) { if (events & EV_READ) {
memset(&kev, 0, sizeof(kev)); memset(&kev, 0, sizeof(kev));
@ -329,10 +332,11 @@ kq_add(struct event_base *base, int fd, short old, short events)
} }
static int static int
kq_del(struct event_base *base, int fd, short old, short events) kq_del(struct event_base *base, int fd, short old, short events, void *p)
{ {
struct kqop *kqop = base->evbase; struct kqop *kqop = base->evbase;
struct kevent kev; struct kevent kev;
(void) p;
if (events & EV_READ) { if (events & EV_READ) {
memset(&kev, 0, sizeof(kev)); memset(&kev, 0, sizeof(kev));

57
poll.c
View File

@ -51,19 +51,19 @@
#include "log-internal.h" #include "log-internal.h"
#include "evmap-internal.h" #include "evmap-internal.h"
struct pollidx {
int idxplus1;
};
struct pollop { struct pollop {
int event_count; /* Highest number alloc */ int event_count; /* Highest number alloc */
int nfds; /* Size of event_* */ int nfds; /* Size of event_* */
int fd_count; /* Size of idxplus1_by_fd */
struct pollfd *event_set; struct pollfd *event_set;
int *idxplus1_by_fd; /* Index into event_set by fd; we add 1 so
* that 0 (which is easy to memset) can mean
* "no entry." */
}; };
static void *poll_init (struct event_base *); static void *poll_init (struct event_base *);
static int poll_add(struct event_base *, int, short old, short events); static int poll_add(struct event_base *, int, short old, short events, void *_idx);
static int poll_del(struct event_base *, int, short old, short events); static int poll_del(struct event_base *, int, short old, short events, void *_idx);
static int poll_dispatch (struct event_base *, struct timeval *); static int poll_dispatch (struct event_base *, struct timeval *);
static void poll_dealloc (struct event_base *); static void poll_dealloc (struct event_base *);
@ -76,6 +76,7 @@ const struct eventop pollops = {
poll_dealloc, poll_dealloc,
0, /* doesn't need_reinit */ 0, /* doesn't need_reinit */
EV_FEATURE_FDS, EV_FEATURE_FDS,
sizeof(struct pollidx),
}; };
static void * static void *
@ -168,10 +169,11 @@ poll_dispatch(struct event_base *base, struct timeval *tv)
} }
static int static int
poll_add(struct event_base *base, int fd, short old, short events) poll_add(struct event_base *base, int fd, short old, short events, void *_idx)
{ {
struct pollop *pop = base->evbase; struct pollop *pop = base->evbase;
struct pollfd *pfd = NULL; struct pollfd *pfd = NULL;
struct pollidx *idx = _idx;
int i; int i;
assert((events & EV_SIGNAL) == 0); assert((events & EV_SIGNAL) == 0);
@ -199,28 +201,9 @@ poll_add(struct event_base *base, int fd, short old, short events)
pop->event_count = tmp_event_count; pop->event_count = tmp_event_count;
} }
if (fd >= pop->fd_count) {
int *tmp_idxplus1_by_fd;
int new_count;
if (pop->fd_count < 32)
new_count = 32;
else
new_count = pop->fd_count * 2;
while (new_count <= fd)
new_count *= 2;
tmp_idxplus1_by_fd =
mm_realloc(pop->idxplus1_by_fd, new_count * sizeof(int));
if (tmp_idxplus1_by_fd == NULL) {
event_warn("realloc");
return (-1);
}
pop->idxplus1_by_fd = tmp_idxplus1_by_fd;
memset(pop->idxplus1_by_fd + pop->fd_count,
0, sizeof(int)*(new_count - pop->fd_count));
pop->fd_count = new_count;
}
i = pop->idxplus1_by_fd[fd] - 1; i = idx->idxplus1 - 1;
if (i >= 0) { if (i >= 0) {
pfd = &pop->event_set[i]; pfd = &pop->event_set[i];
} else { } else {
@ -228,7 +211,7 @@ poll_add(struct event_base *base, int fd, short old, short events)
pfd = &pop->event_set[i]; pfd = &pop->event_set[i];
pfd->events = 0; pfd->events = 0;
pfd->fd = fd; pfd->fd = fd;
pop->idxplus1_by_fd[fd] = i + 1; idx->idxplus1 = i + 1;
} }
pfd->revents = 0; pfd->revents = 0;
@ -246,10 +229,11 @@ poll_add(struct event_base *base, int fd, short old, short events)
*/ */
static int static int
poll_del(struct event_base *base, int fd, short old, short events) poll_del(struct event_base *base, int fd, short old, short events, void *_idx)
{ {
struct pollop *pop = base->evbase; struct pollop *pop = base->evbase;
struct pollfd *pfd = NULL; struct pollfd *pfd = NULL;
struct pollidx *idx = _idx;
int i; int i;
assert((events & EV_SIGNAL) == 0); assert((events & EV_SIGNAL) == 0);
@ -257,7 +241,7 @@ poll_del(struct event_base *base, int fd, short old, short events)
return (0); return (0);
poll_check_ok(pop); poll_check_ok(pop);
i = pop->idxplus1_by_fd[fd] - 1; i = idx->idxplus1 - 1;
if (i < 0) if (i < 0)
return (-1); return (-1);
@ -273,17 +257,20 @@ poll_del(struct event_base *base, int fd, short old, short events)
return (0); return (0);
/* Okay, so we aren't interested in that fd anymore. */ /* Okay, so we aren't interested in that fd anymore. */
pop->idxplus1_by_fd[fd] = 0; idx->idxplus1 = 0;
--pop->nfds; --pop->nfds;
if (i != pop->nfds) { if (i != pop->nfds) {
/* /*
* Shift the last pollfd down into the now-unoccupied * Shift the last pollfd down into the now-unoccupied
* position. * position.
*/ */
memcpy(&pop->event_set[i], &pop->event_set[pop->nfds], memcpy(&pop->event_set[i], &pop->event_set[pop->nfds],
sizeof(struct pollfd)); sizeof(struct pollfd));
pop->idxplus1_by_fd[pop->event_set[i].fd] = i + 1; idx = evmap_io_get_fdinfo(&base->io, pop->event_set[i].fd);
assert(idx);
assert(idx->idxplus1 == pop->nfds + 1);
idx->idxplus1 = i + 1;
} }
poll_check_ok(pop); poll_check_ok(pop);
@ -298,8 +285,6 @@ poll_dealloc(struct event_base *base)
evsig_dealloc(base); evsig_dealloc(base);
if (pop->event_set) if (pop->event_set)
mm_free(pop->event_set); mm_free(pop->event_set);
if (pop->idxplus1_by_fd)
mm_free(pop->idxplus1_by_fd);
memset(pop, 0, sizeof(struct pollop)); memset(pop, 0, sizeof(struct pollop));
mm_free(pop); mm_free(pop);

View File

@ -67,8 +67,8 @@ struct selectop {
}; };
static void *select_init (struct event_base *); static void *select_init (struct event_base *);
static int select_add(struct event_base *, int, short old, short events); static int select_add(struct event_base *, int, short old, short events, void*);
static int select_del(struct event_base *, int, short old, short events); static int select_del(struct event_base *, int, short old, short events, void*);
static int select_dispatch (struct event_base *, struct timeval *); static int select_dispatch (struct event_base *, struct timeval *);
static void select_dealloc (struct event_base *); static void select_dealloc (struct event_base *);
@ -81,6 +81,7 @@ const struct eventop selectops = {
select_dealloc, select_dealloc,
0, /* doesn't need reinit. */ 0, /* doesn't need reinit. */
EV_FEATURE_FDS, EV_FEATURE_FDS,
0,
}; };
static int select_resize(struct selectop *sop, int fdsz); static int select_resize(struct selectop *sop, int fdsz);
@ -207,9 +208,10 @@ select_resize(struct selectop *sop, int fdsz)
static int static int
select_add(struct event_base *base, int fd, short old, short events) select_add(struct event_base *base, int fd, short old, short events, void *p)
{ {
struct selectop *sop = base->evbase; struct selectop *sop = base->evbase;
(void) p;
assert((events & EV_SIGNAL) == 0); assert((events & EV_SIGNAL) == 0);
check_selectop(sop); check_selectop(sop);
@ -251,9 +253,10 @@ select_add(struct event_base *base, int fd, short old, short events)
*/ */
static int static int
select_del(struct event_base *base, int fd, short old, short events) select_del(struct event_base *base, int fd, short old, short events, void *p)
{ {
struct selectop *sop = base->evbase; struct selectop *sop = base->evbase;
(void)p;
assert((events & EV_SIGNAL) == 0); assert((events & EV_SIGNAL) == 0);
check_selectop(sop); check_selectop(sop);

View File

@ -65,8 +65,8 @@
#include "log-internal.h" #include "log-internal.h"
#include "evmap-internal.h" #include "evmap-internal.h"
static int evsig_add(struct event_base *, int, short, short); static int evsig_add(struct event_base *, int, short, short, void *);
static int evsig_del(struct event_base *, int, short, short); static int evsig_del(struct event_base *, int, short, short, void *);
static const struct eventop evsigops = { static const struct eventop evsigops = {
"signal", "signal",
@ -75,7 +75,7 @@ static const struct eventop evsigops = {
evsig_del, evsig_del,
NULL, NULL,
NULL, NULL,
0, 0 0, 0, 0
}; };
struct event_base *evsig_base = NULL; struct event_base *evsig_base = NULL;
@ -205,9 +205,10 @@ _evsig_set_handler(struct event_base *base,
} }
static int static int
evsig_add(struct event_base *base, int evsignal, short old, short events) evsig_add(struct event_base *base, int evsignal, short old, short events, void *p)
{ {
struct evsig_info *sig = &base->sig; struct evsig_info *sig = &base->sig;
(void)p;
assert(evsignal >= 0 && evsignal < NSIG); assert(evsignal >= 0 && evsignal < NSIG);
@ -259,7 +260,7 @@ _evsig_restore_handler(struct event_base *base, int evsignal)
} }
static int static int
evsig_del(struct event_base *base, int evsignal, short old, short events) evsig_del(struct event_base *base, int evsignal, short old, short events, void *p)
{ {
assert(evsignal >= 0 && evsignal < NSIG); assert(evsignal >= 0 && evsignal < NSIG);