From 3631b836510e33aa0f3f8f64fd42e6bb6661191a Mon Sep 17 00:00:00 2001 From: Dustin Hiatt Date: Mon, 9 Feb 2015 13:04:46 -0600 Subject: [PATCH] Added lock to protect the RNG. --- slice/skip/skip.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/slice/skip/skip.go b/slice/skip/skip.go index b23b80a..b7f6ea1 100644 --- a/slice/skip/skip.go +++ b/slice/skip/skip.go @@ -59,6 +59,7 @@ package skip import ( "math/rand" + "sync" "time" ) @@ -76,8 +77,13 @@ const p = .5 // the p level defines the probability that a node // randomly seeded generator. var generator = rand.New(rand.NewSource(time.Now().UnixNano())) +// rnLock protects the RNG as the generator is not threadsafe. +var rnLock sync.Mutex + func generateLevel(maxLevel uint8) uint8 { var level uint8 + rnLock.Lock() + defer rnLock.Unlock() for level = uint8(1); level < maxLevel-1; level++ { if generator.Float64() >= p { return level