> @@ -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? .mrg.