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) ->