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.
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
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().