From 956868ef788ebc0bad5c65c0896c704413638044 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Sun, 11 Nov 2018 18:58:58 +0100 Subject: [PATCH] yield goroutine on pipe write --- transport/pipe/impl.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/transport/pipe/impl.go b/transport/pipe/impl.go index be69dd53..1553e252 100644 --- a/transport/pipe/impl.go +++ b/transport/pipe/impl.go @@ -3,6 +3,7 @@ package pipe import ( "errors" "io" + "runtime" "sync" "time" @@ -125,6 +126,9 @@ func (p *pipe) WriteMultiBuffer(mb buf.MultiBuffer) error { switch { case err == nil: p.readSignal.Signal() + + // Yield current goroutine. Hopefully the reading counterpart can pick up the payload. + runtime.Gosched() return nil case err == errBufferFull && p.discardOverflow: mb.Release()