浏览代码

Ensure we hold a read lock to check hosts

When the policy is checking the length of the host list in
roundRobinHostPolicy ensure that we hold the read lock so that
if SetHosts is called we dont data race.
Chris Bannister 10 年之前
父节点
当前提交
1d1b72e21a
共有 1 个文件被更改,包括 2 次插入1 次删除
  1. 2 1
      policies.go

+ 2 - 1
policies.go

@@ -87,12 +87,13 @@ func (r *roundRobinHostPolicy) Pick(qry *Query) NextHost {
 	// to the number of hosts known to this policy
 	// to the number of hosts known to this policy
 	var i uint32 = 0
 	var i uint32 = 0
 	return func() *HostInfo {
 	return func() *HostInfo {
+		r.mu.RLock()
 		if len(r.hosts) == 0 {
 		if len(r.hosts) == 0 {
+			r.mu.RUnlock()
 			return nil
 			return nil
 		}
 		}
 
 
 		var host *HostInfo
 		var host *HostInfo
-		r.mu.RLock()
 		// always increment pos to evenly distribute traffic in case of
 		// always increment pos to evenly distribute traffic in case of
 		// failures
 		// failures
 		pos := atomic.AddUint32(&r.pos, 1)
 		pos := atomic.AddUint32(&r.pos, 1)