mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
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:
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user