From e5360a5b26aaaf779e796c16b6ac1bd625d2d02a Mon Sep 17 00:00:00 2001 From: Paweł Marks Date: Mon, 6 Jul 2020 10:18:39 +0200 Subject: Fix racecondition on caching of external providers --- .../kotlin/resolvers/external/ExternalLocationProviderFactory.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'plugins/base/src/main/kotlin/resolvers') diff --git a/plugins/base/src/main/kotlin/resolvers/external/ExternalLocationProviderFactory.kt b/plugins/base/src/main/kotlin/resolvers/external/ExternalLocationProviderFactory.kt index 6fb05024..ce6fbba0 100644 --- a/plugins/base/src/main/kotlin/resolvers/external/ExternalLocationProviderFactory.kt +++ b/plugins/base/src/main/kotlin/resolvers/external/ExternalLocationProviderFactory.kt @@ -1,6 +1,7 @@ package org.jetbrains.dokka.base.resolvers.external import org.jetbrains.dokka.links.DRI +import java.util.concurrent.ConcurrentHashMap interface ExternalLocationProvider { @@ -16,8 +17,8 @@ interface ExternalLocationProviderFactory { class ExternalLocationProviderFactoryWithCache(val ext: ExternalLocationProviderFactory) : ExternalLocationProviderFactory { - private val locationProviders: MutableList = mutableListOf() + private val locationProviders = ConcurrentHashMap() override fun getExternalLocationProvider(param: String): ExternalLocationProvider? = - locationProviders.find { it.param == param } ?: ext.getExternalLocationProvider(param)?.also { locationProviders.add(it) } + locationProviders.getOrPut(param) { ext.getExternalLocationProvider(param) } } \ No newline at end of file -- cgit