From 9b5c468dc6c0be93ac5cce3c67bafdceb996b802 Mon Sep 17 00:00:00 2001 From: johncming Date: Fri, 29 Mar 2019 21:02:13 +0800 Subject: [PATCH] clientv3: modify lock type. --- clientv3/client.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/clientv3/client.go b/clientv3/client.go index 445ecfeb1eb..f078f6f8eeb 100644 --- a/clientv3/client.go +++ b/clientv3/client.go @@ -79,7 +79,7 @@ type Client struct { creds *credentials.TransportCredentials balancer balancer.Balancer resolverGroup *endpoint.ResolverGroup - mu *sync.Mutex + mu *sync.RWMutex ctx context.Context cancel context.CancelFunc @@ -143,11 +143,13 @@ func (c *Client) Close() error { func (c *Client) Ctx() context.Context { return c.ctx } // Endpoints lists the registered endpoints for the client. -func (c *Client) Endpoints() (eps []string) { +func (c *Client) Endpoints() []string { // copy the slice; protect original endpoints from being changed - eps = make([]string, len(c.cfg.Endpoints)) + c.mu.RLock() + defer c.mu.RUnlock() + eps := make([]string, len(c.cfg.Endpoints)) copy(eps, c.cfg.Endpoints) - return + return eps } // SetEndpoints updates client's endpoints. @@ -442,7 +444,7 @@ func newClient(cfg *Config) (*Client, error) { creds: creds, ctx: ctx, cancel: cancel, - mu: new(sync.Mutex), + mu: new(sync.RWMutex), callOpts: defaultCallOpts, }