Skip to content

Commit f819ac7

Browse files
committed
Merge pull request #882 from zsfelfoldi/develop
Otto.ToValue concurrency error fixed
2 parents 15bfae5 + d7dabce commit f819ac7

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

jsre/jsre.go

Lines changed: 17 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
}
@@ -297,8 +297,23 @@ func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
297297
return method.Call(method, v)
298298
}
299299

300-
// creates an otto value from a go type
300+
// creates an otto value from a go type (serialized version)
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+
314+
// creates an otto value from a go type (non-serialized version)
301315
func (self *JSRE) ToVal(v interface{}) otto.Value {
316+
302317
result, err := self.vm.ToValue(v)
303318
if err != nil {
304319
fmt.Println("Value unknown:", err)

0 commit comments

Comments
 (0)