(nev & EV_READ ? EPOLLIN : 0)
| (nev & EV_WRITE ? EPOLLOUT : 0);
- epoll_ctl (epoll_fd, mode, fd, &ev);
+ if (epoll_ctl (epoll_fd, mode, fd, &ev))
+ if (errno != ENOENT /* on ENOENT the fd went away, so try to do the right thing */
+ || (nev && epoll_ctl (epoll_fd, EPOLL_CTL_ADD, fd, &ev)))
+ fd_kill (EV_A_ fd);
}
static void
static void
epoll_fork (EV_P)
{
- int fd;
-
epoll_fd = epoll_create (256);
fcntl (epoll_fd, F_SETFD, FD_CLOEXEC);
- fd_rearm_all ();
+ fd_rearm_all (EV_A);
}