tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: thundering pipe herds
On Tue, Nov 24, 2020 at 09:09:59AM +1100, matthew green wrote:
> > @@ -395,9 +401,8 @@ pipeunlock(struct pipe *pipe)
> > KASSERT(pipe->pipe_state & PIPE_LOCKFL);
> >
> > pipe->pipe_state &= ~PIPE_LOCKFL;
> > - if (pipe->pipe_state & PIPE_LWANT) {
> > - pipe->pipe_state &= ~PIPE_LWANT;
> > - cv_broadcast(&pipe->pipe_lkcv);
> > + if (pipe->pipe_waiters > 0) {
> > + cv_signal(&pipe->pipe_lkcv);
> > }
> > }
>
> this part misses the while loop from the freebsd version i think?
...shouldn't, that would turn it back into broadcast.
(except not even that, because the decrement doesn't happen until
wakeup so it'd loop forever)
--
David A. Holland
dholland%netbsd.org@localhost
Home |
Main Index |
Thread Index |
Old Index