ioloop-epoll.c revision 80cfaba9e253545cbcd08f84939b27cdbb4a50d0
deed0441882796b3d985ab867e96b9c56d9fc0d9Timo Sirainen/* Copyright (c) 2004-2016 Dovecot authors, see the included COPYING file */
deed0441882796b3d985ab867e96b9c56d9fc0d9Timo Sirainenvoid io_loop_handler_init(struct ioloop *ioloop, unsigned int initial_fd_count)
deed0441882796b3d985ab867e96b9c56d9fc0d9Timo Sirainen ioloop->handler_context = ctx = i_new(struct ioloop_handler_context, 1);
deed0441882796b3d985ab867e96b9c56d9fc0d9Timo Sirainen i_array_init(&ctx->fd_index, initial_fd_count);
deed0441882796b3d985ab867e96b9c56d9fc0d9Timo Sirainen i_fatal("epoll_create(): %m (you may need to increase "
deed0441882796b3d985ab867e96b9c56d9fc0d9Timo Sirainenvoid io_loop_handler_deinit(struct ioloop *ioloop)
6759ba36f2bac9e83547cfdcf233382a139f1283Timo Sirainen struct ioloop_handler_context *ctx = ioloop->handler_context;
6759ba36f2bac9e83547cfdcf233382a139f1283Timo Sirainen unsigned int i, count;
deed0441882796b3d985ab867e96b9c56d9fc0d9Timo Sirainen list = array_get_modifiable(&ctx->fd_index, &count);
deed0441882796b3d985ab867e96b9c56d9fc0d9Timo Sirainen for (i = 0; i < count; i++)
deed0441882796b3d985ab867e96b9c56d9fc0d9Timo Sirainen array_free(&ioloop->handler_context->fd_index);
deed0441882796b3d985ab867e96b9c56d9fc0d9Timo Sirainen#define IO_EPOLL_INPUT (EPOLLIN | EPOLLPRI | IO_EPOLL_ERROR)
deed0441882796b3d985ab867e96b9c56d9fc0d9Timo Sirainen#define IO_EPOLL_OUTPUT (EPOLLOUT | IO_EPOLL_ERROR)
deed0441882796b3d985ab867e96b9c56d9fc0d9Timo Sirainenstatic int epoll_event_mask(struct io_list *list)
int events = 0, i;
for (i = 0; i < IOLOOP_IOLIST_IOS_PER_FD; i++) {
return events;
int op;
bool first;
if (first) {
int op;
bool last;
if (!closed) {
if (last) {
unsigned int events_count;
bool call;
if (msecs < 0)
ret = 0;
for (i = 0; i < ret; i++) {
for (j = 0; j < IOLOOP_IOLIST_IOS_PER_FD; j++) {
if (call)