clientv3: close open watch channel if substream is closing on reconnect

If substream is closing but outc is still open while reconnecting, then outc
would only be closed once the watch client would connect or once the watch
client is closed. This was leading to deadlocks in the proxy tests. Instead,
close immediately if the context is canceled.

Fixes #7503
This commit is contained in:
Anthony Romano 2017-03-14 17:00:22 -07:00 committed by Gyu-Ho Lee
parent 9d9be2bc86
commit 4a1bffdbc6

View File

@ -694,6 +694,10 @@ func (w *watchGrpcStream) waitCancelSubstreams(stopc <-chan struct{}) <-chan str
go func(ws *watcherStream) {
defer wg.Done()
if ws.closing {
if ws.initReq.ctx.Err() != nil && ws.outc != nil {
close(ws.outc)
ws.outc = nil
}
return
}
select {