Fix a fencepost bug in the select backend

This bug would sometimes lead us to looking one bit off the end of
the fdset arrays, and trying to activate a (nonexistent) event if
that bit was set.

Found by Harlann Stenn.  Fixes a test failure on OpenSolaris.
This commit is contained in:
Nick Mathewson 2011-05-30 11:53:19 -04:00
parent dbb3c65288
commit d90149d4b6

View File

@ -172,9 +172,9 @@ select_dispatch(struct event_base *base, struct timeval *tv)
event_debug(("%s: select reports %d", __func__, res)); event_debug(("%s: select reports %d", __func__, res));
check_selectop(sop); check_selectop(sop);
i = random() % (nfds+1); i = random() % nfds;
for (j = 0; j <= nfds; ++j) { for (j = 0; j < nfds; ++j) {
if (++i >= nfds+1) if (++i >= nfds)
i = 0; i = 0;
res = 0; res = 0;
if (FD_ISSET(i, sop->event_readset_out)) if (FD_ISSET(i, sop->event_readset_out))