diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/SimpleScript.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/SimpleScript.kt index a2ddcb728..d97732c31 100644 --- a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/SimpleScript.kt +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/base/SimpleScript.kt @@ -4,7 +4,6 @@ import com.volmit.iris.core.scripting.kotlin.runner.configureMavenDepsOnAnnotati import kotlin.script.experimental.annotations.KotlinScript import kotlin.script.experimental.api.ScriptCompilationConfiguration import kotlin.script.experimental.api.defaultImports -import kotlin.script.experimental.api.isStandalone import kotlin.script.experimental.api.refineConfiguration import kotlin.script.experimental.dependencies.DependsOn import kotlin.script.experimental.dependencies.Repository @@ -15,7 +14,6 @@ import kotlin.script.experimental.jvm.jvm abstract class SimpleScript object SimpleScriptDefinition : ScriptCompilationConfiguration({ - isStandalone(false) defaultImports( DependsOn::class.qualifiedName!!, Repository::class.qualifiedName!!, diff --git a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/CachedScript.kt b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/CachedScript.kt index 290ea6c33..c30df1f35 100644 --- a/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/CachedScript.kt +++ b/core/src/main/kotlin/com/volmit/iris/core/scripting/kotlin/runner/CachedScript.kt @@ -1,6 +1,6 @@ package com.volmit.iris.core.scripting.kotlin.runner -import java.util.concurrent.atomic.AtomicReferenceFieldUpdater +import java.util.concurrent.locks.ReentrantLock import kotlin.reflect.KClass import kotlin.script.experimental.api.* import kotlin.script.experimental.host.ScriptingHostConfiguration @@ -14,6 +14,7 @@ data class CachedScript( ) : Script, CompiledScript { private val scripts = base.otherScripts.map { CachedScript(it, host, hostConfig) } private val evalConfig = createEvaluationConfiguration() + private val lock = ReentrantLock() @Volatile private var value: ResultWithDiagnostics>? = null @@ -32,13 +33,16 @@ data class CachedScript( override suspend fun getClass(scriptEvaluationConfiguration: ScriptEvaluationConfiguration?) = value ?: run { - val cached = base.getClass(scriptEvaluationConfiguration) - updater.set(this, cached) - return cached + lock.lock() + try { + value ?: base.getClass(scriptEvaluationConfiguration).also { value = it } + } finally { + lock.unlock() + } } override fun evaluate(properties: Map?) = host.runInCoroutineContext { - host.evaluator.invoke(this, createEvaluationConfiguration(properties)) + host.evaluator(this, createEvaluationConfiguration(properties)) } private fun createEvaluationConfiguration(properties: Map?): ScriptEvaluationConfiguration { @@ -57,8 +61,4 @@ data class CachedScript( hostConfig, type) } - - companion object { - private val updater = AtomicReferenceFieldUpdater.newUpdater(CachedScript::class.java, ResultWithDiagnostics::class.java, "value") - } }