diff --git a/karate-core/src/main/java/com/intuit/karate/graal/JsEngine.java b/karate-core/src/main/java/com/intuit/karate/graal/JsEngine.java index e1321df70..084338de0 100644 --- a/karate-core/src/main/java/com/intuit/karate/graal/JsEngine.java +++ b/karate-core/src/main/java/com/intuit/karate/graal/JsEngine.java @@ -116,9 +116,6 @@ public JsEngine copy() { Value v = bindings.getMember(key); if (v.isHostObject()) { temp.bindings.putMember(key, v); -// } else if (v.canExecute()) { -// Value fun = temp.evalForValue("(" + v.getSourceLocation().getCharacters() + ")"); -// temp.bindings.putMember(key, fun); } else { temp.bindings.putMember(key, JsValue.toJava(v)); } diff --git a/karate-core/src/main/java/com/intuit/karate/graal/JsValue.java b/karate-core/src/main/java/com/intuit/karate/graal/JsValue.java index a3d4522bf..7eb824eeb 100644 --- a/karate-core/src/main/java/com/intuit/karate/graal/JsValue.java +++ b/karate-core/src/main/java/com/intuit/karate/graal/JsValue.java @@ -385,7 +385,7 @@ public boolean removeMember(String key) { public static final Object LOCK = new Object(); - public static class SharableMembersAndExecutable extends SharableMembers implements ProxyExecutable { + static class SharableMembersAndExecutable extends SharableMembers implements ProxyExecutable { SharableMembersAndExecutable(Value v) { super(v); @@ -406,7 +406,7 @@ public Object execute(Value... args) { } - public static class SharableMembersAndInstantiable extends SharableMembersAndExecutable implements ProxyInstantiable { + static class SharableMembersAndInstantiable extends SharableMembersAndExecutable implements ProxyInstantiable { SharableMembersAndInstantiable(Value v) { super(v); @@ -415,10 +415,13 @@ public static class SharableMembersAndInstantiable extends SharableMembersAndExe @Override public Object newInstance(Value... args) { Object[] newArgs = new Object[args.length]; - for (int i = 0; i < newArgs.length; i++) { - newArgs[i] = new JsValue(args[i]).value; + // the synchronized block should include the pre-processing of arguments + synchronized (LOCK) { + for (int i = 0; i < newArgs.length; i++) { + newArgs[i] = new JsValue(args[i]).value; + } + return new JsValue(v.execute(newArgs)).value; } - return new JsValue(v.execute(newArgs)).value; } }