From: Florian Hotze Date: Wed, 2 Oct 2024 20:53:49 +0000 (+0200) Subject: [jsscripting] Synchronize context access in logger initialization (#17496) X-Git-Url: https://git.basschouten.com/?a=commitdiff_plain;h=856d526d95abc6c3f7e15d0afce36441437a1a7a;p=openhab-addons.git [jsscripting] Synchronize context access in logger initialization (#17496) * [jsscripting] Synchronize context access in logger initialisation to avoid illegal multi-thread access Fixes #17494. Signed-off-by: Florian Hotze --- diff --git a/bundles/org.openhab.automation.jsscripting/src/main/java/org/openhab/automation/jsscripting/internal/DebuggingGraalScriptEngine.java b/bundles/org.openhab.automation.jsscripting/src/main/java/org/openhab/automation/jsscripting/internal/DebuggingGraalScriptEngine.java index 76f1afb2dd..8c71899a68 100644 --- a/bundles/org.openhab.automation.jsscripting/src/main/java/org/openhab/automation/jsscripting/internal/DebuggingGraalScriptEngine.java +++ b/bundles/org.openhab.automation.jsscripting/src/main/java/org/openhab/automation/jsscripting/internal/DebuggingGraalScriptEngine.java @@ -15,6 +15,7 @@ package org.openhab.automation.jsscripting.internal; import static org.openhab.core.automation.module.script.ScriptTransformationService.OPENHAB_TRANSFORMATION_SCRIPT; import java.util.Arrays; +import java.util.concurrent.locks.Lock; import java.util.stream.Collectors; import javax.script.Compilable; @@ -34,7 +35,7 @@ import org.slf4j.LoggerFactory; * @author Jonathan Gilbert - Initial contribution * @author Florian Hotze - Improve logger name, Fix memory leak caused by exception logging */ -class DebuggingGraalScriptEngine +class DebuggingGraalScriptEngine extends InvocationInterceptingScriptEngineWithInvocableAndCompilableAndAutoCloseable { private static final int STACK_TRACE_LENGTH = 5; @@ -48,8 +49,18 @@ class DebuggingGraalScriptEngine { + extends InvocationInterceptingScriptEngineWithInvocableAndCompilableAndAutoCloseable + implements Lock { private static final Logger LOGGER = LoggerFactory.getLogger(OpenhabGraalJSScriptEngine.class); private static final Source GLOBAL_SOURCE; @@ -346,4 +349,34 @@ public class OpenhabGraalJSScriptEngine return new InputStreamReader(ioStream); } + + @Override + public void lock() { + lock.lock(); + } + + @Override + public void lockInterruptibly() throws InterruptedException { + lock.lockInterruptibly(); + } + + @Override + public boolean tryLock() { + return lock.tryLock(); + } + + @Override + public boolean tryLock(long l, TimeUnit timeUnit) throws InterruptedException { + return lock.tryLock(l, timeUnit); + } + + @Override + public void unlock() { + lock.unlock(); + } + + @Override + public Condition newCondition() { + return lock.newCondition(); + } }