kern/45291: kevent(2) ignores timeout if nevents == 0
John-Mark Gurney
gurney_j at efn.org
Sun Oct 19 11:11:44 PDT 2003
John Polstra wrote this message on Sun, Oct 19, 2003 at 10:38 -0700:
> On 19-Oct-2003 Boris Nikolaus wrote:
> > On Thu, Oct 16, 2003 at 10:09:58AM -0700, John-Mark Gurney wrote:
> >> events to wait for. In fact, after reading select's manpage, this
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >> misfeature isn't documented, and select really should return EINVAL
EBADF
> >> if nfds is 0, and -1 is an invalid fd (which is the last fd that
> >> select is suppose to check)..
> >
> > Select's manpage says, it checks all file descriptors from 0 to
> > nfds - 1. The set of whole numbers which are >= 0 and <= -1 is empty,
yes, but -1 is an invalid fd, so how can use that to put an upper bound
on a set when that number isn't valid to describe the numbers for the
set (the set of fds)?
> > so select has to check no descriptors and waits for the timeout. This
> > is exactly what select does, so this behaviour is implicitely
> > documented.
> >
> > Changing select's behaviour as you suggest would break many software
I never suggested that..
> > as this behavious is often used, both in main loops (which have to
> > observe a set of file descriptors and timers and do not want to
> > handle the case "only timers left" in a special way) and explicitely
> > for sleeping (before microsleep/nanosleep have been invented, there
> > was no function for sleeping with resolution below seconds, so the
> > common way for sleeping in these cases was to call select with
> > nfds == 0).
>
> Boris is right about this, John-Mark. If you think otherwise then
> you really need to go read the code in a few real-world event loops.
do you mean select loops? or event loops? I've written enough code on
both.
> They absolutely rely on this behavior of select. If anybody changed
> it they'd have a whole lot of broken programs on their hands. You may
> view it as a case of lazy programmers using the wrong system call for
> sleeping, but in fact it is just the proper and most sensible behavior
> for select to have at this boundary condition.
I never suggested that we change/fix select. I'm simply saying that
the manpage doesn't document the behavior everyone expects/sees... I
was simply playing devil's advocate on this subject.
--
John-Mark Gurney Voice: +1 415 225 5579
"All that I will do, has been done, All that I have, has not."
More information about the freebsd-bugs
mailing list