From b9356e3d26734a8239fe1efcb92f3f823e7cceb5 Mon Sep 17 00:00:00 2001 From: Doug Fawley Date: Thu, 3 Aug 2023 11:03:58 -0700 Subject: [PATCH] client: fix race between connection error and subconn shutdown (#6494) --- clientconn.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/clientconn.go b/clientconn.go index 8d7bb03a0..9b350254c 100644 --- a/clientconn.go +++ b/clientconn.go @@ -1353,12 +1353,14 @@ func (ac *addrConn) resetTransport() { if err := ac.tryAllAddrs(acCtx, addrs, connectDeadline); err != nil { ac.cc.resolveNow(resolver.ResolveNowOptions{}) - // After exhausting all addresses, the addrConn enters - // TRANSIENT_FAILURE. + ac.mu.Lock() if acCtx.Err() != nil { + // addrConn was torn down. + ac.mu.Unlock() return } - ac.mu.Lock() + // After exhausting all addresses, the addrConn enters + // TRANSIENT_FAILURE. ac.updateConnectivityState(connectivity.TransientFailure, err) // Backoff.