You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2018/08/06 17:53:40 UTC

[couchdb] 01/02: Fix segfault on serialized resource reuse

This is an automated email from the ASF dual-hosted git repository.

davisp pushed a commit to branch add-chakra-support
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 87f7b1e1347d932c514e63111d76cda75160c1dd
Author: Paul J. Davis <pa...@gmail.com>
AuthorDate: Mon Aug 6 12:50:16 2018 -0500

    Fix segfault on serialized resource reuse
---
 src/couch_chakra/src/couch_chakra.erl | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/couch_chakra/src/couch_chakra.erl b/src/couch_chakra/src/couch_chakra.erl
index b1af729..0c02033 100644
--- a/src/couch_chakra/src/couch_chakra.erl
+++ b/src/couch_chakra/src/couch_chakra.erl
@@ -269,9 +269,17 @@ create_ddoc_context(#st{runtime = Rt}, DDoc) ->
 
 
 load_script(Ctx, ScriptName) ->
-    {ok, Script} = get_priv_file(ScriptName),
-    BinScriptName = list_to_binary(ScriptName),
-    {ok, _} = chakra:eval(Ctx, Script, [{source_url, BinScriptName}]).
+    Code = case get(ScriptName) of
+        undefined ->
+            {ok, Script} = get_priv_file(ScriptName),
+            {ok, Serialized} = chakra:serialize(Ctx, Script),
+            put(ScriptName, Serialized),
+            Serialized;
+        Else ->
+            Else
+    end,
+    BinScriptName = iolist_to_binary(ScriptName),
+    {ok, _} = chakra:run(Ctx, Code, [{source_url, BinScriptName}]).
 
 
 get_priv_file(FileName) ->