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 {
val value = get(key)
return if (value == null) {
val answer = defaultValue()
put(key, answer)
answer
} else {
value
synchronized(this) {
val value = get(key)
return if (value == null) {
val answer = defaultValue()
put(key, answer)
answer
} else {
value
}
}
}