1
0
mirror of https://github.com/golang/go synced 2024-11-26 14:46:47 -07:00

io/ioutil: fix data race on rand

Fixes #4212.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6641050
This commit is contained in:
Dmitriy Vyukov 2012-10-09 21:08:53 +04:00
parent d901808869
commit 49a5c28a18

View File

@ -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:]
}