JVM_IR: synchronized getOrPut for SLRUMap

This commit is contained in:
Georgy Bronnikov
2021-01-27 22:02:50 +03:00
parent 78d62dcb1e
commit be67dacef1
@@ -28,12 +28,14 @@ class InlineCache {
} }
inline fun <K, V : Any> SLRUMap<K, V>.getOrPut(key: K, defaultValue: () -> V): V { inline fun <K, V : Any> SLRUMap<K, V>.getOrPut(key: K, defaultValue: () -> V): V {
val value = get(key) synchronized(this) {
return if (value == null) { val value = get(key)
val answer = defaultValue() return if (value == null) {
put(key, answer) val answer = defaultValue()
answer put(key, answer)
} else { answer
value } else {
value
}
} }
} }