Explorar o código

yield goroutine on pipe write

Darien Raymond %!s(int64=7) %!d(string=hai) anos
pai
achega
956868ef78
Modificáronse 1 ficheiros con 4 adicións e 0 borrados
  1. 4 0
      transport/pipe/impl.go

+ 4 - 0
transport/pipe/impl.go

@@ -3,6 +3,7 @@ package pipe
 import (
 import (
 	"errors"
 	"errors"
 	"io"
 	"io"
+	"runtime"
 	"sync"
 	"sync"
 	"time"
 	"time"
 
 
@@ -125,6 +126,9 @@ func (p *pipe) WriteMultiBuffer(mb buf.MultiBuffer) error {
 		switch {
 		switch {
 		case err == nil:
 		case err == nil:
 			p.readSignal.Signal()
 			p.readSignal.Signal()
+
+			// Yield current goroutine. Hopefully the reading counterpart can pick up the payload.
+			runtime.Gosched()
 			return nil
 			return nil
 		case err == errBufferFull && p.discardOverflow:
 		case err == errBufferFull && p.discardOverflow:
 			mb.Release()
 			mb.Release()