diff --git a/clientconn.go b/clientconn.go index ccaff94a..1d3b46c6 100644 --- a/clientconn.go +++ b/clientconn.go @@ -234,13 +234,13 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn * defer func() { select { case <-ctx.Done(): - if conn != nil { - conn.Close() - } - conn = nil - err = ctx.Err() + conn, err = nil, ctx.Err() default: } + + if err != nil { + cc.Close() + } }() for _, opt := range opts { @@ -296,11 +296,9 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn * return nil, ctx.Err() case err := <-waitC: if err != nil { - cc.Close() return nil, err } case <-timeoutCh: - cc.Close() return nil, ErrClientConnTimeout } // If balancer is nil or balancer.Notify() is nil, ok will be false here.