From 78ddc05d9b338930bfa4a0d2b4b5039724b7d013 Mon Sep 17 00:00:00 2001 From: Easwar Swaminathan Date: Fri, 13 Jan 2023 10:25:48 -0800 Subject: [PATCH] xdsclient: fix race in load report implementation (#5927) --- xds/internal/xdsclient/clientimpl_loadreport.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xds/internal/xdsclient/clientimpl_loadreport.go b/xds/internal/xdsclient/clientimpl_loadreport.go index dd0ae225e8d0..e53df3f1edd9 100644 --- a/xds/internal/xdsclient/clientimpl_loadreport.go +++ b/xds/internal/xdsclient/clientimpl_loadreport.go @@ -30,13 +30,15 @@ import ( func (c *clientImpl) ReportLoad(server *bootstrap.ServerConfig) (*load.Store, func()) { c.authorityMu.Lock() a, err := c.newAuthorityLocked(server) - c.authorityMu.Unlock() if err != nil { + c.authorityMu.Unlock() c.logger.Infof("xds: failed to connect to the control plane to do load reporting for authority %q: %v", server, err) return nil, func() {} } // Hold the ref before starting load reporting. a.refLocked() + c.authorityMu.Unlock() + store, cancelF := a.reportLoad() return store, func() { cancelF()