[SLC] SymbolLightModifierList: replace custom loop with compareAndSet with updateAndGet

^KTIJ-23783
This commit is contained in:
Dmitrii Gridin
2022-12-06 14:38:16 +01:00
committed by Space Team
parent 3ee451c873
commit 8a9acfcab0
@@ -97,10 +97,9 @@ internal class LazyModifiersBox(
fun hasModifier(modifier: String): Boolean { fun hasModifier(modifier: String): Boolean {
modifiersMapReference.get()[modifier]?.let { return it } modifiersMapReference.get()[modifier]?.let { return it }
val newValues = computer(modifier) ?: mapOf(modifier to false) val newValues = computer(modifier) ?: mapOf(modifier to false)
do { modifiersMapReference.updateAndGet {
val currentMap = modifiersMapReference.get() it.putAll(newValues)
val newMap = currentMap.putAll(newValues) }
} while (!modifiersMapReference.compareAndSet(currentMap, newMap))
return newValues[modifier] ?: error("Inconsistent state: $modifier") return newValues[modifier] ?: error("Inconsistent state: $modifier")
} }