From fb90a69bba60a2b1a9a55794cc50ecb0efcfc253 Mon Sep 17 00:00:00 2001 From: Pierre Nicolas <pierre.nicolas@savoirfairelinux.com> Date: Wed, 19 Jun 2024 11:53:13 -0400 Subject: [PATCH] contact: fix race-condition Fix a race-condition which was leading to a loadMore and a swarmLoaded called between setMode and conversationStarted. GitLab: #1682 Change-Id: Ie75ddd880808213b7abff7ee6ab3cbe740c9cebe --- .../src/main/kotlin/net/jami/model/Account.kt | 8 ++++++-- .../src/main/kotlin/net/jami/services/AccountService.kt | 4 +--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/model/Account.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/model/Account.kt index dc4bcc956..765a1eb3e 100644 --- a/jami-android/libjamiclient/src/main/kotlin/net/jami/model/Account.kt +++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/model/Account.kt @@ -95,7 +95,7 @@ class Account( fun isContact(uri: Uri): Boolean = getContact(uri) != null - fun conversationStarted(conversation: Conversation) { + fun conversationStarted(conversation: Conversation, newMode: Conversation.Mode? = null) { //Log.w(TAG, "conversationStarted ${conversation.accountId} ${conversation.uri} ${conversation.isSwarm} ${conversation.contacts.size} ${conversation.mode.blockingFirst()}") synchronized(conversations) { if (conversation.isSwarm) { @@ -103,7 +103,11 @@ class Account( swarmConversations[conversation.uri.rawRingId] = conversation } conversations[conversation.uri.uri] = conversation - if (conversation.isSwarm && conversation.mode.blockingFirst() === Conversation.Mode.OneToOne) { + + if (newMode != null) conversation.setMode(newMode) + + val mode = newMode ?: conversation.mode.blockingFirst() + if (conversation.isSwarm && mode === Conversation.Mode.OneToOne) { try { val contact = conversation.contact!! val key = contact.uri.uri diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/services/AccountService.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/services/AccountService.kt index 6a7a0c0e2..727f32144 100644 --- a/jami-android/libjamiclient/src/main/kotlin/net/jami/services/AccountService.kt +++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/services/AccountService.kt @@ -1448,10 +1448,8 @@ class AccountService( } if (!conversation.lastElementLoadedSubject.hasValue()) conversation.lastElementLoadedSubject.onSuccess(loadMore(conversation, 8).ignoreElement().cache()) - if (setMode) - conversation.setMode(mode) } - account.conversationStarted(conversation) + account.conversationStarted(conversation, if (setMode) mode else null) loadMore(conversation, 2) } -- GitLab