Otto.ToValue concurrency error fixed

This commit is contained in:
zsfelfoldi 2015-05-08 12:27:35 +02:00
parent 69aac4d531
commit 1de1359e3b
1 changed files with 16 additions and 2 deletions

View File

@ -286,7 +286,7 @@ func (self *JSRE) loadScript(call otto.FunctionCall) otto.Value {
// uses the "prettyPrint" JS function to format a value // uses the "prettyPrint" JS function to format a value
func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) { func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
var method otto.Value var method otto.Value
v, err = self.vm.ToValue(v) v, err = self.ToValue(v)
if err != nil { if err != nil {
return return
} }
@ -298,8 +298,22 @@ func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
} }
// creates an otto value from a go type // 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 { func (self *JSRE) ToVal(v interface{}) otto.Value {
result, err := self.vm.ToValue(v)
result, err := self.ToValue(v)
if err != nil { if err != nil {
fmt.Println("Value unknown:", err) fmt.Println("Value unknown:", err)
return otto.UndefinedValue() return otto.UndefinedValue()