|  | @@ -338,10 +338,15 @@ func (c *Connection) waitForDataOutput() error {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Write implements io.Writer.
 | 
	
		
			
				|  |  |  func (c *Connection) Write(b []byte) (int, error) {
 | 
	
		
			
				|  |  | -	totalWritten := 0
 | 
	
		
			
				|  |  | +	updatePending := false
 | 
	
		
			
				|  |  | +	defer func() {
 | 
	
		
			
				|  |  | +		if updatePending {
 | 
	
		
			
				|  |  | +			c.dataUpdater.WakeUp()
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	for {
 | 
	
		
			
				|  |  | -		dataWritten := false
 | 
	
		
			
				|  |  | +		totalWritten := 0
 | 
	
		
			
				|  |  |  		for {
 | 
	
		
			
				|  |  |  			if c == nil || c.State() != StateActive {
 | 
	
		
			
				|  |  |  				return totalWritten, io.ErrClosedPipe
 | 
	
	
		
			
				|  | @@ -354,15 +359,16 @@ func (c *Connection) Write(b []byte) (int, error) {
 | 
	
		
			
				|  |  |  				break
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -			dataWritten = true
 | 
	
		
			
				|  |  | +			updatePending = true
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			if totalWritten == len(b) {
 | 
	
		
			
				|  |  |  				return totalWritten, nil
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		if dataWritten {
 | 
	
		
			
				|  |  | +		if updatePending {
 | 
	
		
			
				|  |  |  			c.dataUpdater.WakeUp()
 | 
	
		
			
				|  |  | +			updatePending = false
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		if err := c.waitForDataOutput(); err != nil {
 | 
	
	
		
			
				|  | @@ -375,8 +381,14 @@ func (c *Connection) Write(b []byte) (int, error) {
 | 
	
		
			
				|  |  |  func (c *Connection) WriteMultiBuffer(mb buf.MultiBuffer) error {
 | 
	
		
			
				|  |  |  	defer mb.Release()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	updatePending := false
 | 
	
		
			
				|  |  | +	defer func() {
 | 
	
		
			
				|  |  | +		if updatePending {
 | 
	
		
			
				|  |  | +			c.dataUpdater.WakeUp()
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	for {
 | 
	
		
			
				|  |  | -		dataWritten := false
 | 
	
		
			
				|  |  |  		for {
 | 
	
		
			
				|  |  |  			if c == nil || c.State() != StateActive {
 | 
	
		
			
				|  |  |  				return io.ErrClosedPipe
 | 
	
	
		
			
				|  | @@ -387,14 +399,15 @@ func (c *Connection) WriteMultiBuffer(mb buf.MultiBuffer) error {
 | 
	
		
			
				|  |  |  			}) {
 | 
	
		
			
				|  |  |  				break
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -			dataWritten = true
 | 
	
		
			
				|  |  | +			updatePending = true
 | 
	
		
			
				|  |  |  			if mb.IsEmpty() {
 | 
	
		
			
				|  |  |  				return nil
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		if dataWritten {
 | 
	
		
			
				|  |  | +		if updatePending {
 | 
	
		
			
				|  |  |  			c.dataUpdater.WakeUp()
 | 
	
		
			
				|  |  | +			updatePending = false
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		if err := c.waitForDataOutput(); err != nil {
 |