mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-25 07:41:36 +02: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
@ -167,7 +167,7 @@ REGPRM2 static void _do_poll(struct poller *p, int exp)
|
|||||||
fdtab[fd].ev |= n;
|
fdtab[fd].ev |= n;
|
||||||
|
|
||||||
if (fdtab[fd].iocb) {
|
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
|
/* Mark the events as speculative before processing
|
||||||
* them so that if nothing can be done we don't need
|
* 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)
|
if (fdtab[fd].ev & FD_POLL_OUT)
|
||||||
fd_ev_set(fd, DIR_WR);
|
fd_ev_set(fd, DIR_WR);
|
||||||
|
|
||||||
|
/* Save number of updates to detect creation of new FDs. */
|
||||||
|
old_updt = fd_nbupdt;
|
||||||
fdtab[fd].iocb(fd);
|
fdtab[fd].iocb(fd);
|
||||||
|
|
||||||
/* One or more fd might have been created during the iocb().
|
/* One or more fd might have been created during the iocb().
|
||||||
|
Loading…
x
Reference in New Issue
Block a user