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