Refine locking to avoid dead lock
#KT-46215 Fixed
This commit is contained in:
committed by
Space
parent
6ae4c3f281
commit
590a8d088d
+5
-3
@@ -8,9 +8,11 @@ package org.jetbrains.kotlin.scripting.compiler.plugin.definitions
|
||||
import org.jetbrains.kotlin.scripting.definitions.LazyScriptDefinitionProvider
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsSource
|
||||
import kotlin.concurrent.write
|
||||
import java.util.concurrent.locks.ReentrantLock
|
||||
import kotlin.concurrent.withLock
|
||||
|
||||
open class CliScriptDefinitionProvider : LazyScriptDefinitionProvider() {
|
||||
private val definitionsLock = ReentrantLock()
|
||||
private val definitionsFromSources: MutableList<Sequence<ScriptDefinition>> = arrayListOf()
|
||||
private val definitions: MutableList<ScriptDefinition> = arrayListOf()
|
||||
private var defaultDefinition: ScriptDefinition? = null
|
||||
@@ -22,7 +24,7 @@ open class CliScriptDefinitionProvider : LazyScriptDefinitionProvider() {
|
||||
}
|
||||
|
||||
fun setScriptDefinitions(newDefinitions: List<ScriptDefinition>) {
|
||||
lock.write {
|
||||
definitionsLock.withLock {
|
||||
definitions.clear()
|
||||
val (withoutStdDef, stdDef) = newDefinitions.partition { !it.isDefault }
|
||||
definitions.addAll(withoutStdDef)
|
||||
@@ -33,7 +35,7 @@ open class CliScriptDefinitionProvider : LazyScriptDefinitionProvider() {
|
||||
}
|
||||
|
||||
fun setScriptDefinitionsSources(newSources: List<ScriptDefinitionsSource>) {
|
||||
lock.write {
|
||||
definitionsLock.withLock {
|
||||
definitionsFromSources.clear()
|
||||
for (it in newSources) {
|
||||
definitionsFromSources.add(it.definitions.constrainOnce())
|
||||
|
||||
Reference in New Issue
Block a user