#define KQUEUE_ERROR_THRESHOLD 20 /* after 20 kqueue errors, restart */
#define ERROR_EXPIRE_TIME 3600 /* expire errors after an hour */
#define KQUEUE_ERROR_THRESHOLD 20 /* after 20 kqueue errors, restart */
#define ERROR_EXPIRE_TIME 3600 /* expire errors after an hour */
- if (kevent(kqueue_id, chglist, i, 0, 0, 0) < 0)
+ if (kevent(kqueue_id, chglist, i, 0, 0, 0) < 0 && errno != EBADF)
CurrentTime, wait.tv_sec));
/* check for active events */
CurrentTime, wait.tv_sec));
/* check for active events */
- nevs = kevent(kqueue_id, 0, 0, events, POLLS_PER_KQUEUE,
+ nevs = kevent(kqueue_id, 0, 0, events, events_count,
/* Log the kqueue error */
log_write(LS_SOCKET, L_ERROR, 0, "kevent() error: %m");
if (!errors++)
/* Log the kqueue error */
log_write(LS_SOCKET, L_ERROR, 0, "kevent() error: %m");
if (!errors++)
- timer_add(&clear_error, error_clear, 0, TT_PERIODIC,
+ timer_add(timer_init(&clear_error), error_clear, 0, TT_PERIODIC,
ERROR_EXPIRE_TIME);
else if (errors > KQUEUE_ERROR_THRESHOLD) /* too many errors... */
server_restart("too many kevent errors");
ERROR_EXPIRE_TIME);
else if (errors > KQUEUE_ERROR_THRESHOLD) /* too many errors... */
server_restart("too many kevent errors");