aboutsummaryrefslogtreecommitdiffstats
path: root/jsre
diff options
context:
space:
mode:
authorBas van Kervel <bas@ethdev.com>2016-02-19 19:06:58 +0800
committerBas van Kervel <bas@ethdev.com>2016-02-19 19:55:31 +0800
commit6777531a2d3367ef3cee933d7a36945eecb37090 (patch)
treec07fe639278781727413c1d4cd340151959e3001 /jsre
parentaa36a6ae4f24f07e2c470a21c93ff37ad5861982 (diff)
downloadgo-tangerine-6777531a2d3367ef3cee933d7a36945eecb37090.tar.gz
go-tangerine-6777531a2d3367ef3cee933d7a36945eecb37090.tar.zst
go-tangerine-6777531a2d3367ef3cee933d7a36945eecb37090.zip
console: seed random number generator
Diffstat (limited to 'jsre')
-rw-r--r--jsre/jsre.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/jsre/jsre.go b/jsre/jsre.go
index a4c9d970b..f4464910d 100644
--- a/jsre/jsre.go
+++ b/jsre/jsre.go
@@ -18,8 +18,11 @@
package jsre
import (
+ crand "crypto/rand"
+ "encoding/binary"
"fmt"
"io/ioutil"
+ "math/rand"
"sync"
"time"
@@ -70,6 +73,18 @@ func New(assetPath string) *JSRE {
return re
}
+// randomSource returns a pseudo random value generator.
+func randomSource() *rand.Rand {
+ bytes := make([]byte, 8)
+ seed := time.Now().UnixNano()
+ if _, err := crand.Read(bytes); err == nil {
+ seed = int64(binary.LittleEndian.Uint64(bytes))
+ }
+
+ src := rand.NewSource(seed)
+ return rand.New(src)
+}
+
// This function runs the main event loop from a goroutine that is started
// when JSRE is created. Use Stop() before exiting to properly stop it.
// The event loop processes vm access requests from the evalQueue in a
@@ -81,6 +96,9 @@ func New(assetPath string) *JSRE {
// called from JS through an RPC call.
func (self *JSRE) runEventLoop() {
vm := otto.New()
+ r := randomSource()
+ vm.SetRandomSource(r.Float64)
+
registry := map[*jsTimer]*jsTimer{}
ready := make(chan *jsTimer)