mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-22 13:46:52 +00:00
BUG/MINOR: select: fix excess number of dead/skip reported
In 1.8, commit ab62f5195
("MINOR: polling: Use fd_update_events to update
events seen for a fd") updated the pollers to rely on fd_update_events(),
but the modification delayed the test of presence of the FD in the report,
resulting in owner/thread_mask and possibly event updates being performed
for each FD appearing in a block of 32 FDs around an active one. This
caused the request rate to be ~3 times lower with select() than poll()
under 6 threads.
This can be backported as far as 1.8.
This commit is contained in:
parent
c37ccd70b4
commit
fcc5281513
@ -197,6 +197,15 @@ static void _do_poll(struct poller *p, int exp, int wake)
|
||||
for (count = BITS_PER_INT, fd = fds * BITS_PER_INT; count && fd < maxfd; count--, fd++) {
|
||||
unsigned int n = 0;
|
||||
|
||||
if (FD_ISSET(fd, tmp_evts[DIR_RD]))
|
||||
n |= FD_EV_READY_R;
|
||||
|
||||
if (FD_ISSET(fd, tmp_evts[DIR_WR]))
|
||||
n |= FD_EV_READY_W;
|
||||
|
||||
if (!n)
|
||||
continue;
|
||||
|
||||
#ifdef DEBUG_FD
|
||||
_HA_ATOMIC_INC(&fdtab[fd].event_count);
|
||||
#endif
|
||||
@ -210,12 +219,6 @@ static void _do_poll(struct poller *p, int exp, int wake)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (FD_ISSET(fd, tmp_evts[DIR_RD]))
|
||||
n |= FD_EV_READY_R;
|
||||
|
||||
if (FD_ISSET(fd, tmp_evts[DIR_WR]))
|
||||
n |= FD_EV_READY_W;
|
||||
|
||||
fd_update_events(fd, n);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user