From 1de1359e3b99785ea94f7d75c8aa0dac6b034f24 Mon Sep 17 00:00:00 2001
From: zsfelfoldi <zsfelfoldi@gmail.com>
Date: Fri, 8 May 2015 12:27:35 +0200
Subject: Otto.ToValue concurrency error fixed

---
 jsre/jsre.go | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

(limited to 'jsre')

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()
-- 
cgit v1.2.3


From d7dabce73291d2bb768625c7e465f2f645980dbf Mon Sep 17 00:00:00 2001
From: zsfelfoldi <zsfelfoldi@gmail.com>
Date: Fri, 8 May 2015 13:29:48 +0200
Subject: ToVal serialization fix

---
 jsre/jsre.go | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

(limited to 'jsre')

diff --git a/jsre/jsre.go b/jsre/jsre.go
index 7de41428b..adf2f8121 100644
--- a/jsre/jsre.go
+++ b/jsre/jsre.go
@@ -297,7 +297,7 @@ func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
 	return method.Call(method, v)
 }
 
-// creates an otto value from a go type
+// creates an otto value from a go type (serialized version)
 func (self *JSRE) ToValue(v interface{}) (otto.Value, error) {
 	done := make(chan bool)
 	req := &evalReq{
@@ -311,9 +311,10 @@ func (self *JSRE) ToValue(v interface{}) (otto.Value, error) {
 	return req.res.result, req.res.err
 }
 
+// creates an otto value from a go type (non-serialized version)
 func (self *JSRE) ToVal(v interface{}) otto.Value {
 
-	result, err := self.ToValue(v)
+	result, err := self.vm.ToValue(v)
 	if err != nil {
 		fmt.Println("Value unknown:", err)
 		return otto.UndefinedValue()
-- 
cgit v1.2.3