mirror of
https://github.com/haproxy/haproxy.git
synced 2026-06-07 15:52:10 -04:00
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:
parent
6320c3cb46
commit
fb5470d144
1 changed files with 3 additions and 1 deletions
|
|
@ -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().
|
||||
|
|
|
|||
Loading…
Reference in a new issue