grpc: call balancer.Close() before returning from ccBalancerWrapper.close() (#4364)

This commit is contained in:
Easwar Swaminathan 2021-04-29 21:44:26 -07:00 committed by GitHub
parent aa3ef8fb8f
commit 28078834f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 3 deletions

View File

@ -69,10 +69,10 @@ func (ccb *ccBalancerWrapper) watcher() {
select {
case t := <-ccb.scBuffer.Get():
ccb.scBuffer.Load()
ccb.balancerMu.Lock()
if ccb.done.HasFired() {
break
}
ccb.balancerMu.Lock()
su := t.(*scStateUpdate)
ccb.balancer.UpdateSubConnState(su.sc, balancer.SubConnState{ConnectivityState: su.state, ConnectionError: su.err})
ccb.balancerMu.Unlock()
@ -80,7 +80,6 @@ func (ccb *ccBalancerWrapper) watcher() {
}
if ccb.done.HasFired() {
ccb.balancer.Close()
ccb.mu.Lock()
scs := ccb.subConns
ccb.subConns = nil
@ -95,6 +94,9 @@ func (ccb *ccBalancerWrapper) watcher() {
}
func (ccb *ccBalancerWrapper) close() {
ccb.balancerMu.Lock()
defer ccb.balancerMu.Unlock()
ccb.balancer.Close()
ccb.done.Fire()
}
@ -119,13 +121,19 @@ func (ccb *ccBalancerWrapper) handleSubConnStateChange(sc balancer.SubConn, s co
func (ccb *ccBalancerWrapper) updateClientConnState(ccs *balancer.ClientConnState) error {
ccb.balancerMu.Lock()
defer ccb.balancerMu.Unlock()
if ccb.done.HasFired() {
return nil
}
return ccb.balancer.UpdateClientConnState(*ccs)
}
func (ccb *ccBalancerWrapper) resolverError(err error) {
ccb.balancerMu.Lock()
defer ccb.balancerMu.Unlock()
if ccb.done.HasFired() {
return
}
ccb.balancer.ResolverError(err)
ccb.balancerMu.Unlock()
}
func (ccb *ccBalancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (balancer.SubConn, error) {