Commit 49a5c28a authored by Dmitriy Vyukov's avatar Dmitriy Vyukov

io/ioutil: fix data race on rand

Fixes #4212.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6641050
parent d9018088
......@@ -8,6 +8,7 @@ import (
"os"
"path/filepath"
"strconv"
"sync"
"time"
)
......@@ -16,18 +17,21 @@ import (
// chance the file doesn't exist yet - keeps the number of tries in
// TempFile to a minimum.
var rand uint32
var randmu sync.Mutex
func reseed() uint32 {
return uint32(time.Now().UnixNano() + int64(os.Getpid()))
}
func nextSuffix() string {
randmu.Lock()
r := rand
if r == 0 {
r = reseed()
}
r = r*1664525 + 1013904223 // constants from Numerical Recipes
rand = r
randmu.Unlock()
return strconv.Itoa(int(1e9 + r%1e9))[1:]
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment