Merge pull request #10595 from johncming/locking

clientv3: modify lock type.
This commit is contained in:
Xiang Li
2019-04-30 14:19:02 -07:00
committed by GitHub

View File

@@ -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,
}