From 79ccdd8f8e4545e1bde9c55cbae30fedeb19ff27 Mon Sep 17 00:00:00 2001 From: Fu Wei Date: Wed, 19 Oct 2022 00:01:08 +0800 Subject: [PATCH] clientconn: go idle if conn closed after preface received (#5714) --- clientconn.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/clientconn.go b/clientconn.go index 9691444d040..b75d6d72e0f 100644 --- a/clientconn.go +++ b/clientconn.go @@ -1325,9 +1325,15 @@ func (ac *addrConn) createTransport(addr resolver.Address, copts transport.Conne return nil case <-connClosed.Done(): // The transport has already closed. If we received the preface, too, - // this is not an error. + // this is not an error and go idle. select { case <-prefaceReceived.Done(): + ac.mu.Lock() + defer ac.mu.Unlock() + + if ac.state != connectivity.Shutdown { + ac.updateConnectivityState(connectivity.Idle, nil) + } return nil default: return errors.New("connection closed before server preface received")