On Thu, Oct 14, 2021 at 02:46:01AM -0600, Martin Pieuchot wrote:
> CVSROOT: /cvs
> Module name: src
> Changes by: [email protected] 2021/10/14 02:46:01
>
> Modified files:
> sys/kern : sys_generic.c
>
> Log message:
> Implement select(2) and pselect(2) on top of kqueue.
>
> The given set of fds are converted to equivalent kevents using EV_SET(2)
> and passed to the scanning internals of kevent(2): kqueue_scan(). Those
> events are lazily deleted to reduce the overhard of freeing/allocating
> them when select(2) is called in a loop.
>
> ktrace(1) will now output the converted kevents on top of the usuals set
> bits to be able to find possible error in the convertion.
>
> This switch implies that select(2) and pselect(2) will now query the
> underlying kqfilters instead of the *_poll() routines. An increase in
> latency is visible, especially with UDP sockets and NET_LOCK()-contended
> subsystems and will be addressed in a next step.
>
> The various *_poll() routines could be removed as soon as poll(2) and
> ppoll(2) are also converted.
>
> Based on similar work done on DragonFlyBSD with inputs from from visa@,
> millert@, anton@, cheloha@, thanks!
>
> ok claudio@, bluhm@
>
regress/usr.bin/ssh got stuck in an odd state where the sshd.log keeps
growing. This line is repeated over and over:
pselect: Broken pipe
Did the select semantics change?