Skip to content

Commit 1de1359

Browse files
committed
Otto.ToValue concurrency error fixed
1 parent 69aac4d commit 1de1359

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

jsre/jsre.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ func (self *JSRE) loadScript(call otto.FunctionCall) otto.Value {
286286
// uses the "prettyPrint" JS function to format a value
287287
func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
288288
var method otto.Value
289-
v, err = self.vm.ToValue(v)
289+
v, err = self.ToValue(v)
290290
if err != nil {
291291
return
292292
}
@@ -298,8 +298,22 @@ func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
298298
}
299299

300300
// creates an otto value from a go type
301+
func (self *JSRE) ToValue(v interface{}) (otto.Value, error) {
302+
done := make(chan bool)
303+
req := &evalReq{
304+
fn: func(res *evalResult) {
305+
res.result, res.err = self.vm.ToValue(v)
306+
},
307+
done: done,
308+
}
309+
self.evalQueue <- req
310+
<-done
311+
return req.res.result, req.res.err
312+
}
313+
301314
func (self *JSRE) ToVal(v interface{}) otto.Value {
302-
result, err := self.vm.ToValue(v)
315+
316+
result, err := self.ToValue(v)
303317
if err != nil {
304318
fmt.Println("Value unknown:", err)
305319
return otto.UndefinedValue()

0 commit comments

Comments
 (0)