Переглянути джерело

Merge pull request #850 from znly/fix-race

control.go: fix race condition on randr
Chris Bannister 9 роки тому
батько
коміт
41d2db7fd5
1 змінених файлів з 6 додано та 1 видалено
  1. 6 1
      control.go

+ 6 - 1
control.go

@@ -11,11 +11,14 @@ import (
 	"sync/atomic"
 	"time"
 
+	"sync"
+
 	"golang.org/x/net/context"
 )
 
 var (
-	randr *rand.Rand
+	randr    *rand.Rand
+	mutRandr sync.Mutex
 )
 
 func init() {
@@ -135,7 +138,9 @@ func hostInfo(addr string, defaultPort int) (*HostInfo, error) {
 }
 
 func shuffleHosts(hosts []*HostInfo) []*HostInfo {
+	mutRandr.Lock()
 	perm := randr.Perm(len(hosts))
+	mutRandr.Unlock()
 	shuffled := make([]*HostInfo, len(hosts))
 
 	for i, host := range hosts {