* Poul-Henning Kamp <[EMAIL PROTECTED]> [000807 10:03] wrote:
> In message <[EMAIL PROTECTED]>, Matt Dillon writes:
> >:> * Stephen McKay <[EMAIL PROTECTED]> [000805 08:49] wrote:
> >:> >
> >:> > Patch 2 is smaller and possibly controversial. Normally bufdaemon and
> >:> > syncer are sleeping when they are told to suspend. This delays shutdown
> >:> > by a few boring seconds. With this patch, it is zippier. I expect people
> >:> > to complain about this shortcut, but every sleeping process should expect
> >:> > to be woken for no reason at all. Basic kernel premise.
> >:>
> >:> You better bet it's controversial, this isn't "Basic kernel premise"
> >:
> >:Actually, that depends. It is definitely poor programming practice to
> >:not check the condition for which you slept on wakeup.
> >:
> >:> *boom* *crash* *ow* :)
> >:
> >:Doctor: So don't do that.
> >
> > I gotta agree. This is very bad programming practice. There are many,
> > many places in the kernel where tsleep() is called with a 0 delay and
> > assumed not to return until something meaningful happens. For example,
> > for handling NFS retries, some of the locking code (I think), and I
> > could probably find many others.
>
> Then this code should be changed to do the right thing, which is
> to *always* check the condition being slept on before proceeding.
Can you give a reason why we'll have to now start coding defensively
because our arguments to tsleep() are just "advisory" now?
I'm not really sure why for a single reader/writer situation we have
to have hysterics for a stray wakeup, it bloats code and is not needed
in all places.
I can also imagine some fun infinite loops like so:
monitor issues wakeup
producer wakes and terminates or goes away
consumer spins checking on availability
Also, one must now do this?
timeo = currenttime + 2;
while (timeo != currenttime)
tsleep(timeo);
?
-Alfred
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message