Merge pull request #7345 from heyitsanthony/fix-stream-err

grpcproxy: only return ctx error in chan stream if recvc is empty
This commit is contained in:
Anthony Romano
2017-02-21 11:08:49 -08:00
committed by GitHub

View File

@@ -116,17 +116,23 @@ func (s *chanStream) SendMsg(m interface{}) error {
func (s *chanStream) RecvMsg(m interface{}) error {
v := m.(*interface{})
select {
case msg, ok := <-s.recvc:
if !ok {
return grpc.ErrClientConnClosing
for {
select {
case msg, ok := <-s.recvc:
if !ok {
return grpc.ErrClientConnClosing
}
if err, ok := msg.(error); ok {
return err
}
*v = msg
return nil
case <-s.ctx.Done():
}
if err, ok := msg.(error); ok {
return err
if len(s.recvc) == 0 {
// prioritize any pending recv messages over canceled context
break
}
*v = msg
return nil
case <-s.ctx.Done():
}
return s.ctx.Err()
}