aboutsummaryrefslogtreecommitdiffstats
path: root/jsre/jsre.go
diff options
context:
space:
mode:
authorzsfelfoldi <zsfelfoldi@gmail.com>2015-05-08 18:27:35 +0800
committerzsfelfoldi <zsfelfoldi@gmail.com>2015-05-08 18:27:35 +0800
commit1de1359e3b99785ea94f7d75c8aa0dac6b034f24 (patch)
tree4690e01dbc3861005dae55d27ebb09fe3f59b4ad /jsre/jsre.go
parent69aac4d5316ca8ec3429de534349a8dbdb0b59a5 (diff)
downloaddexon-1de1359e3b99785ea94f7d75c8aa0dac6b034f24.tar.gz
dexon-1de1359e3b99785ea94f7d75c8aa0dac6b034f24.tar.zst
dexon-1de1359e3b99785ea94f7d75c8aa0dac6b034f24.zip
Otto.ToValue concurrency error fixed
Diffstat (limited to 'jsre/jsre.go')
-rw-r--r--jsre/jsre.go18
1 files changed, 16 insertions, 2 deletions
diff --git a/jsre/jsre.go b/jsre/jsre.go
index 7549b5e1e..7de41428b 100644
--- a/jsre/jsre.go
+++ b/jsre/jsre.go
@@ -286,7 +286,7 @@ func (self *JSRE) loadScript(call otto.FunctionCall) otto.Value {
// uses the "prettyPrint" JS function to format a value
func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
var method otto.Value
- v, err = self.vm.ToValue(v)
+ v, err = self.ToValue(v)
if err != nil {
return
}
@@ -298,8 +298,22 @@ func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
}
// creates an otto value from a go type
+func (self *JSRE) ToValue(v interface{}) (otto.Value, error) {
+ done := make(chan bool)
+ req := &evalReq{
+ fn: func(res *evalResult) {
+ res.result, res.err = self.vm.ToValue(v)
+ },
+ done: done,
+ }
+ self.evalQueue <- req
+ <-done
+ return req.res.result, req.res.err
+}
+
func (self *JSRE) ToVal(v interface{}) otto.Value {
- result, err := self.vm.ToValue(v)
+
+ result, err := self.ToValue(v)
if err != nil {
fmt.Println("Value unknown:", err)
return otto.UndefinedValue()