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
dholl...@netbsd.org

Reply via email to