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