Scripting: implement correct disposal of REPL state on finalization

#KT-47927 fixed
This commit is contained in:
Ilya Chernikov
2021-08-20 17:29:22 +02:00
committed by TeamCityServer
parent a45e31720c
commit 4243bafd1d
3 changed files with 32 additions and 1 deletions
@@ -6,6 +6,7 @@
package kotlin.script.experimental.jvmhost.jsr223
import org.jetbrains.kotlin.cli.common.repl.*
import java.lang.ref.WeakReference
import java.util.concurrent.locks.ReentrantReadWriteLock
import javax.script.ScriptContext
import javax.script.ScriptEngineFactory
@@ -32,8 +33,9 @@ class KotlinJsr223ScriptEngineImpl(
private var lastScriptContext: ScriptContext? = null
val jsr223HostConfiguration = ScriptingHostConfiguration(defaultJvmScriptingHostConfiguration) {
val weakThis = WeakReference(this@KotlinJsr223ScriptEngineImpl)
jsr223 {
getScriptContext { lastScriptContext ?: getContext() }
getScriptContext { weakThis.get()?.let { it.lastScriptContext ?: it.getContext() } }
}
}