diff --git a/transport/pipe/impl.go b/transport/pipe/impl.go
index b795aa74..1d1035e6 100644
--- a/transport/pipe/impl.go
+++ b/transport/pipe/impl.go
@@ -107,7 +107,6 @@ func (p *pipe) writeMultiBufferInternal(mb buf.MultiBuffer) error {
 	defer p.Unlock()
 
 	if err := p.getState(false); err != nil {
-		mb.Release()
 		return err
 	}
 
@@ -122,7 +121,11 @@ func (p *pipe) WriteMultiBuffer(mb buf.MultiBuffer) error {
 
 	for {
 		err := p.writeMultiBufferInternal(mb)
-		if err == nil || err != errBufferFull {
+		if err == nil {
+			p.readSignal.Signal()
+			return nil
+		} else if err != errBufferFull {
+			mb.Release()
 			p.readSignal.Signal()
 			return err
 		}