aboutsummaryrefslogtreecommitdiffstats
path: root/internal
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2016-06-03 17:25:38 +0800
committerFelix Lange <fjl@twurst.com>2016-06-03 17:25:38 +0800
commit89ba380b3c89df259c1a26747fb5002519d2a6cb (patch)
tree707e465946a926364fa2f86d4f5386d41a703c85 /internal
parent16a23ff74056aa306eb8a87272277bc8660f3252 (diff)
parentb57b6e341e3865de3b3a5aa108e642d1a6a5b590 (diff)
downloadgo-tangerine-89ba380b3c89df259c1a26747fb5002519d2a6cb.tar
go-tangerine-89ba380b3c89df259c1a26747fb5002519d2a6cb.tar.gz
go-tangerine-89ba380b3c89df259c1a26747fb5002519d2a6cb.tar.bz2
go-tangerine-89ba380b3c89df259c1a26747fb5002519d2a6cb.tar.lz
go-tangerine-89ba380b3c89df259c1a26747fb5002519d2a6cb.tar.xz
go-tangerine-89ba380b3c89df259c1a26747fb5002519d2a6cb.tar.zst
go-tangerine-89ba380b3c89df259c1a26747fb5002519d2a6cb.zip
Merge pull request #2656 from fjl/console-test
cmd/geth: make console tests more robust
Diffstat (limited to 'internal')
-rw-r--r--internal/jsre/jsre.go16
1 files changed, 9 insertions, 7 deletions
diff --git a/internal/jsre/jsre.go b/internal/jsre/jsre.go
index a95efd379..481389304 100644
--- a/internal/jsre/jsre.go
+++ b/internal/jsre/jsre.go
@@ -24,7 +24,6 @@ import (
"io"
"io/ioutil"
"math/rand"
- "sync"
"time"
"github.com/ethereum/go-ethereum/common"
@@ -44,7 +43,7 @@ type JSRE struct {
output io.Writer
evalQueue chan *evalReq
stopEventLoop chan bool
- loopWg sync.WaitGroup
+ closed chan struct{}
}
// jsTimer is a single timer instance with a callback function
@@ -66,10 +65,10 @@ func New(assetPath string, output io.Writer) *JSRE {
re := &JSRE{
assetPath: assetPath,
output: output,
+ closed: make(chan struct{}),
evalQueue: make(chan *evalReq),
stopEventLoop: make(chan bool),
}
- re.loopWg.Add(1)
go re.runEventLoop()
re.Set("loadScript", re.loadScript)
re.Set("inspect", prettyPrintJS)
@@ -98,6 +97,8 @@ func randomSource() *rand.Rand {
// functions should be used if and only if running a routine that was already
// called from JS through an RPC call.
func (self *JSRE) runEventLoop() {
+ defer close(self.closed)
+
vm := otto.New()
r := randomSource()
vm.SetRandomSource(r.Float64)
@@ -213,8 +214,6 @@ loop:
timer.timer.Stop()
delete(registry, timer)
}
-
- self.loopWg.Done()
}
// Do executes the given function on the JS event loop.
@@ -227,8 +226,11 @@ func (self *JSRE) Do(fn func(*otto.Otto)) {
// stops the event loop before exit, optionally waits for all timers to expire
func (self *JSRE) Stop(waitForCallbacks bool) {
- self.stopEventLoop <- waitForCallbacks
- self.loopWg.Wait()
+ select {
+ case <-self.closed:
+ case self.stopEventLoop <- waitForCallbacks:
+ <-self.closed
+ }
}
// Exec(file) loads and runs the contents of a file