]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: init plan9 hashkey by time
authorMeng Zhuo <mzh@golangcn.org>
Mon, 29 Mar 2021 07:10:50 +0000 (15:10 +0800)
committerMeng Zhuo <mzh@golangcn.org>
Tue, 30 Mar 2021 01:17:14 +0000 (01:17 +0000)
Maphash requires non-zero integer for initial hashkey

Fixes #45090

Change-Id: Ie567f648c19e81cddc8e72a1c64809fbf52df188
Reviewed-on: https://go-review.googlesource.com/c/go/+/303969
Trust: Meng Zhuo <mzh@golangcn.org>
Run-TryBot: Meng Zhuo <mzh@golangcn.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Richard Miller <millerresearch@gmail.com>
Reviewed-by: Keith Randall <khr@golang.org>
src/runtime/os_plan9.go

index 77665f461ae1924a38194f95e01808c95b75d1f8..4d428346f0e37de08ef4763700abdc06b939c499 100644 (file)
@@ -325,7 +325,23 @@ func crash() {
 
 //go:nosplit
 func getRandomData(r []byte) {
-       extendRandom(r, 0)
+       // inspired by wyrand see hash32.go for detail
+       t := nanotime()
+       v := getg().m.procid ^ uint64(t)
+
+       for len(r) > 0 {
+               v ^= 0xa0761d6478bd642f
+               v *= 0xe7037ed1a0b428db
+               size := 8
+               if len(r) < 8 {
+                       size = len(r)
+               }
+               for i := 0; i < size; i++ {
+                       r[i] = byte(v >> (8 * i))
+               }
+               r = r[size:]
+               v = v>>32 | v<<32
+       }
 }
 
 func initsig(preinit bool) {