ioloop.c revision 4ddc84facf9bafde1e3d81fae017b420b4f092f9
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen/* Copyright (c) 2002-2013 Dovecot authors, see the included COPYING file */
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainenstatic void io_loop_initialize_handler(struct ioloop *ioloop)
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen initial_fd_count = ioloop->max_fd_count > 0 &&
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen ioloop->max_fd_count < IOLOOP_INITIAL_FD_COUNT ?
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen ioloop->max_fd_count : IOLOOP_INITIAL_FD_COUNT;
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen io_loop_handler_init(ioloop, initial_fd_count);
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainenstruct io *io_add(int fd, enum io_condition condition,
f5e8a76a128d4e92f0641135183c164fd5c5ce5eTimo Sirainen /* if we got here from an I/O handler callback, make sure we
f5e8a76a128d4e92f0641135183c164fd5c5ce5eTimo Sirainen don't try to handle this one next. */
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenstatic void io_remove_full(struct io **_io, bool closed)
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen /* make sure the callback doesn't get called anymore.
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen kqueue code relies on this. */
27e859cee42654bff801ba96677cfc4e4e0108c7Timo Sirainen struct io_file *io_file = (struct io_file *)io;
632018810af689442569cbb0139c55868923ccfeTimo Sirainen i_assert(((*io)->condition & IO_NOTIFY) == 0);
632018810af689442569cbb0139c55868923ccfeTimo Sirainenstatic void timeout_update_next(struct timeout *timeout, struct timeval *tv_now)
8d3af185ae454653fad60e41c5f36edb1d45c868Timo Sirainen if (gettimeofday(&timeout->next_run, NULL) < 0)
8d3af185ae454653fad60e41c5f36edb1d45c868Timo Sirainen /* we don't want microsecond accuracy or this function will be
8d3af185ae454653fad60e41c5f36edb1d45c868Timo Sirainen called all the time - millisecond is more than enough */
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen timeout->next_run.tv_usec -= timeout->next_run.tv_usec % 1000;
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen timeout->next_run.tv_sec += timeout->msecs/1000;
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen timeout->next_run.tv_usec += (timeout->msecs%1000)*1000;
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainenstruct timeout *timeout_add(unsigned int msecs, unsigned int source_linenum,
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen timeout_update_next(timeout, timeout->ioloop->running ?
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen priorityq_add(timeout->ioloop->timeouts, &timeout->item);
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainentimeout_add_short(unsigned int msecs, unsigned int source_linenum,
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen return timeout_add(msecs, source_linenum, callback, context);
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainenstatic void timeout_free(struct timeout *timeout)
int ret;
return ret;
int msecs;
return msecs;
unsigned int i, count;
for (i = 0; i < count; i++) {
unsigned int t_id;
T_BEGIN {
} T_END;
unsigned int t_id;
void io_loop_time_refresh(void)
return ioloop;
return ctx;
here from activate/deactivate loop */
unsigned int i, count;
for (i = 0; i < count; ) {
return old_io;
return new_io;
return old_to;
return new_to;