@@ -183,7 +183,7 @@ func ProxyStream(director StreamDirector, logger grpclog.Logger, frontTrans tran
183183 // wait for both data streams to complete.
184184 egressErr := <- egressPathChan
185185 ingressErr := <- ingressPathChan
186- if egressErr != nil || ingressErr != nil {
186+ if egressErr != io . EOF || ingressErr != io . EOF {
187187 logger .Printf ("proxy: Proxy.handleStream %v failure during transfer ingres: %v egress: %v" , frontStream .Method (), ingressErr , egressErr )
188188 frontTrans .WriteStatus (frontStream , codes .Unavailable , fmt .Sprintf ("problem in transfer ingress: %v egress: %v" , ingressErr , egressErr ))
189189 return
@@ -223,18 +223,17 @@ func backendTransportStream(director StreamDirector, ctx context.Context) (trans
223223// forwardDataFrames moves data from one gRPC transport `Stream` to another in async fashion.
224224// It returns an error channel. `nil` on it signifies everything was fine, anything else is a serious problem.
225225func forwardDataFrames (srcStream * transport.Stream , dstStream * transport.Stream , dstTransport transportWriter ) chan error {
226- ret := make (chan error )
226+ ret := make (chan error , 1 )
227227
228228 go func () {
229229 data := make ([]byte , 4096 )
230230 opt := & transport.Options {}
231231 for {
232232 n , err := srcStream .Read (data )
233-
234- if err == io .EOF {
235- ret <- nil
236- break
237- } else if err != nil {
233+ if err != nil { // including io.EOF
234+ // Send nil to terminate the stream.
235+ opt .Last = true
236+ dstTransport .Write (dstStream , nil , opt )
238237 ret <- err
239238 break
240239 }
@@ -243,9 +242,6 @@ func forwardDataFrames(srcStream *transport.Stream, dstStream *transport.Stream,
243242 break
244243 }
245244 }
246- // Send nil to terminate the stream.
247- opt .Last = true
248- dstTransport .Write (dstStream , nil , opt )
249245 close (ret )
250246 }()
251247 return ret
0 commit comments