From 2e76914c1917aed6738c26dc391ba4f49bbe11b0 Mon Sep 17 00:00:00 2001 From: gulevsky Date: Mon, 4 May 2026 12:13:23 +0300 Subject: [PATCH] fix deadlock at Div2View.setDataAsync() call commit_hash:54a845794d945778b8861c0a7e34db59a43cc3cf --- .../div/core/view2/errors/ErrorCollectors.kt | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/errors/ErrorCollectors.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/errors/ErrorCollectors.kt index b61215746..a778344f0 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/errors/ErrorCollectors.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/errors/ErrorCollectors.kt @@ -14,23 +14,22 @@ internal class ErrorCollectors @Inject constructor( ) { private val collectors = mutableMapOf>() - fun getOrCreate(tag: DivDataTag, divData: DivData?): ErrorCollector = synchronized(collectors) { - val bucket = collectors.getOrPut(tag.id) { mutableListOf() } - return bucket.find { it.divData === divData }?.let { existingCollector -> - existingCollector.attachParsingErrors() - existingCollector - } ?: run { - ErrorCollector(divData, tag, errorsReporter).also { newCollector -> - bucket.add(newCollector) - newCollector.attachParsingErrors() - } + fun getOrCreate(tag: DivDataTag, divData: DivData?): ErrorCollector { + val collector = synchronized(collectors) { + val bucket = collectors.getOrPut(tag.id) { mutableListOf() } + bucket.find { it.divData === divData } + ?: ErrorCollector(divData, tag, errorsReporter).also { bucket.add(it) } } + collector.attachParsingErrors() + return collector } - fun getOrNull(tag: DivDataTag, divData: DivData?): ErrorCollector? = synchronized(collectors) { - return collectors[tag.id]?.find { it.divData === divData }?.apply { - attachParsingErrors() + fun getOrNull(tag: DivDataTag, divData: DivData?): ErrorCollector? { + val collector = synchronized(collectors) { + collectors[tag.id]?.find { it.divData === divData } } + collector?.attachParsingErrors() + return collector } fun reset(tags: List) {