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.
This commit is contained in:
Willy Tarreau 2012-12-14 00:02:33 +01:00
parent 6320c3cb46
commit fb5470d144

View File

@ -167,7 +167,7 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
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 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
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().