X-Git-Url: https://git.llucax.com/software/libev.git/blobdiff_plain/6e0418ec92a0b2bfbbe75790bb015bcd022f5dad..4179355c2b48ffa197ae4cf21b521ccf0201436c:/ev_epoll.c diff --git a/ev_epoll.c b/ev_epoll.c index 4edbecd..bb56218 100644 --- a/ev_epoll.c +++ b/ev_epoll.c @@ -42,7 +42,7 @@ epoll_modify (EV_P_ int fd, int oev, int nev) (nev & EV_READ ? EPOLLIN : 0) | (nev & EV_WRITE ? EPOLLOUT : 0); - if (epoll_ctl (backend_fd, mode, fd, &ev)) + if (expect_false (epoll_ctl (backend_fd, mode, fd, &ev))) if (errno != ENOENT /* on ENOENT the fd went away, so try to do the right thing */ || (nev && epoll_ctl (backend_fd, EPOLL_CTL_ADD, fd, &ev))) fd_kill (EV_A_ fd); @@ -54,7 +54,7 @@ epoll_poll (EV_P_ ev_tstamp timeout) int i; int eventcnt = epoll_wait (backend_fd, epoll_events, epoll_eventmax, (int)ceil (timeout * 1000.)); - if (eventcnt < 0) + if (expect_false (eventcnt < 0)) { if (errno != EINTR) syserr ("(libev) epoll_wait"); @@ -74,12 +74,12 @@ epoll_poll (EV_P_ ev_tstamp timeout) if (expect_false (eventcnt == epoll_eventmax)) { ev_free (epoll_events); - epoll_eventmax = array_roundsize (epoll_events, epoll_eventmax << 1); + epoll_eventmax = array_nextsize (sizeof (struct epoll_event), epoll_eventmax, epoll_eventmax + 1); epoll_events = (struct epoll_event *)ev_malloc (sizeof (struct epoll_event) * epoll_eventmax); } } -static int +int inline_size epoll_init (EV_P_ int flags) { backend_fd = epoll_create (256); @@ -89,7 +89,7 @@ epoll_init (EV_P_ int flags) fcntl (backend_fd, F_SETFD, FD_CLOEXEC); - backend_fudge = 1e-3; /* needed to compensate for epoll returning early */ + backend_fudge = 0.; /* kernel sources seem to indicate this to be zero */ backend_modify = epoll_modify; backend_poll = epoll_poll; @@ -99,15 +99,13 @@ epoll_init (EV_P_ int flags) return EVBACKEND_EPOLL; } -static void +void inline_size epoll_destroy (EV_P) { - close (backend_fd); - ev_free (epoll_events); } -static void +void inline_size epoll_fork (EV_P) { close (backend_fd);