File tree Expand file tree Collapse file tree 1 file changed +18
-27
lines changed
Expand file tree Collapse file tree 1 file changed +18
-27
lines changed Original file line number Diff line number Diff line change @@ -3,7 +3,6 @@ package pipe
33import (
44 "errors"
55 "io"
6- "runtime"
76 "sync"
87 "time"
98
@@ -136,11 +135,10 @@ func (p *pipe) writeMultiBufferInternal(mb buf.MultiBuffer) error {
136135
137136 if p .data == nil {
138137 p .data = mb
139- return nil
138+ } else {
139+ p .data , _ = buf .MergeMulti (p .data , mb )
140140 }
141-
142- p .data , _ = buf .MergeMulti (p .data , mb )
143- return errSlowDown
141+ return nil
144142}
145143
146144func (p * pipe ) WriteMultiBuffer (mb buf.MultiBuffer ) error {
@@ -155,30 +153,23 @@ func (p *pipe) WriteMultiBuffer(mb buf.MultiBuffer) error {
155153 return nil
156154 }
157155
158- if err == errSlowDown {
159- p .readSignal .Signal ()
160-
161- // Yield current goroutine. Hopefully the reading counterpart can pick up the payload.
162- runtime .Gosched ()
163- return nil
164- }
165-
166- if err == errBufferFull && p .option .discardOverflow {
167- buf .ReleaseMulti (mb )
168- return nil
156+ if err == errBufferFull {
157+ if p .option .discardOverflow {
158+ buf .ReleaseMulti (mb )
159+ return nil
160+ }
161+ select {
162+ case <- p .writeSignal .Wait ():
163+ continue
164+ case <- p .done .Wait ():
165+ buf .ReleaseMulti (mb )
166+ return io .ErrClosedPipe
167+ }
169168 }
170169
171- if err != errBufferFull {
172- buf .ReleaseMulti (mb )
173- p .readSignal .Signal ()
174- return err
175- }
176-
177- select {
178- case <- p .writeSignal .Wait ():
179- case <- p .done .Wait ():
180- return io .ErrClosedPipe
181- }
170+ buf .ReleaseMulti (mb )
171+ p .readSignal .Signal ()
172+ return err
182173 }
183174}
184175
You can’t perform that action at this time.
0 commit comments