# poll() result too large



## jplevyak (Jan 12, 2010)

I am calling poll() and the result is 2 while only one
of the revent fields is non-zero.

This is on FreeBSD 8.

Inspection of the code in sys_generic.c
and uipc_socket.c indicates that selrecord is being called
twice for poll sockets and that pollrescan is counting
the number of td->td_sel entries which are ready and
returning the result.  I am concerned that there are 2
entries for the poll socket because of the comments
in selsetbits (sys_generic.c) which are:

                 * XXX Check for a duplicate set.  This can occur because a
                 * socket calls selrecord() twice for each poll() call
                 * resulting in two selfds per real fd.  selrescan() will
                 * call selsetbits twice as a result.


This check is not being done for poll().

Thanx,
jplevyak @ acm org
jplevyak @ apache org


----------

