Otto.ToValue concurrency error fixed
This commit is contained in:
parent
69aac4d531
commit
1de1359e3b
18
jsre/jsre.go
18
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
|
// 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()
|
||||||
|
|
Loading…
Reference in New Issue