Skip to content

Commit e06c937

Browse files
Merge pull request #54 from Workiva/generator_threadsafety
Added lock to protect the RNG.
2 parents 941bf46 + 3631b83 commit e06c937

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

slice/skip/skip.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ package skip
5959

6060
import (
6161
"math/rand"
62+
"sync"
6263
"time"
6364
)
6465

@@ -76,8 +77,13 @@ const p = .5 // the p level defines the probability that a node
7677
// randomly seeded generator.
7778
var generator = rand.New(rand.NewSource(time.Now().UnixNano()))
7879

80+
// rnLock protects the RNG as the generator is not threadsafe.
81+
var rnLock sync.Mutex
82+
7983
func generateLevel(maxLevel uint8) uint8 {
8084
var level uint8
85+
rnLock.Lock()
86+
defer rnLock.Unlock()
8187
for level = uint8(1); level < maxLevel-1; level++ {
8288
if generator.Float64() >= p {
8389
return level

0 commit comments

Comments
 (0)