OPTIM: epoll: current fd does not count as a new one
The epoll loop checks for newly appeared FDs in order to process them early
if they're accepted sockets. Since the introduction of the fd_ev_set()
calls before the iocb(), the current FD is always in the update list,
and we don't want to check it again, so we must assign the old_updt
index just before calling the I/O handler.
diff --git a/src/ev_epoll.c b/src/ev_epoll.c
index b858e18..5f7b7c3 100644
--- a/src/ev_epoll.c
+++ b/src/ev_epoll.c
@@ -167,7 +167,7 @@
fdtab[fd].ev |= n;
if (fdtab[fd].iocb) {
- int new_updt, old_updt = fd_nbupdt; /* Save number of updates to detect creation of new FDs. */
+ int new_updt, old_updt;
/* Mark the events as speculative before processing
* them so that if nothing can be done we don't need
@@ -179,6 +179,8 @@
if (fdtab[fd].ev & FD_POLL_OUT)
fd_ev_set(fd, DIR_WR);
+ /* Save number of updates to detect creation of new FDs. */
+ old_updt = fd_nbupdt;
fdtab[fd].iocb(fd);
/* One or more fd might have been created during the iocb().