From e9374370b9ed894429ab5249dfbbd4ac3cb6fd05 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Wed, 7 Jun 2023 12:04:50 -0400 Subject: [PATCH] Moves author creation for Addressable notes to outside a @synchronized block to avoid deadlocks. --- .../com/vitorpamplona/amethyst/model/LocalCache.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt index ad73be435..604ff6338 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -119,19 +119,27 @@ object LocalCache { } @Synchronized - fun getOrCreateAddressableNote(key: ATag): AddressableNote { + fun getOrCreateAddressableNoteInternal(key: ATag): AddressableNote { checkNotInMainThread() // we can't use naddr here because naddr might include relay info and // the preferred relay should not be part of the index. return addressables[key.toTag()] ?: run { val answer = AddressableNote(key) - answer.author = checkGetOrCreateUser(key.pubKeyHex) addressables.put(key.toTag(), answer) answer } } + fun getOrCreateAddressableNote(key: ATag): AddressableNote { + val note = getOrCreateAddressableNoteInternal(key) + // Loads the user outside a Syncronized block to avoid blocking + if (note.author == null) { + note.author = checkGetOrCreateUser(key.pubKeyHex) + } + return note + } + fun consume(event: MetadataEvent) { // new event val oldUser = getOrCreateUser(event.pubKey)