From bb47c0495abddb173aef4f177d1657b50610f6df Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C3=A9o?= <leopold.chappuis@savoirfairelinux.com>
Date: Wed, 29 Jan 2025 16:34:39 -0500
Subject: [PATCH] conversation-loading: fix concurrent access issue

resolved a segfault triggered by multiple clients accessing and calling clearCache simultaneously during conversation loading.

Change-Id: Ic2b134d67d1a207f45e52c5aedeee5712ead14ba
---
 src/jamidht/conversation.cpp | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/jamidht/conversation.cpp b/src/jamidht/conversation.cpp
index 5b25af67a..50bf4c1e9 100644
--- a/src/jamidht/conversation.cpp
+++ b/src/jamidht/conversation.cpp
@@ -670,6 +670,7 @@ public:
     /**
      * Loaded history represents the linearized history to show for clients
      */
+    mutable std::mutex loadingMtx_;
     mutable History loadedHistory_ {};
     std::vector<std::shared_ptr<libjami::SwarmMessage>> addToHistory(
         const std::vector<std::map<std::string, std::string>>& commits,
@@ -878,6 +879,9 @@ Conversation::Impl::loadMessages(const LogOptions& options)
 std::vector<libjami::SwarmMessage>
 Conversation::Impl::loadMessages2(const LogOptions& options, History* optHistory)
 {
+
+    std::lock_guard lk(loadingMtx_);
+
     if (!optHistory) {
         std::lock_guard lock(historyMtx_);
         if (!repository_ || isLoadingHistory_)
@@ -1712,11 +1716,15 @@ Conversation::loadMessages2(const OnLoadMessages2& cb, const LogOptions& options
 void
 Conversation::clearCache()
 {
+    std::lock_guard lk(pimpl_->loadingMtx_);
     pimpl_->loadedHistory_.messageList.clear();
     pimpl_->loadedHistory_.quickAccess.clear();
     pimpl_->loadedHistory_.pendingEditions.clear();
     pimpl_->loadedHistory_.pendingReactions.clear();
-    pimpl_->memberToStatus.clear();
+    {
+        std::lock_guard lk(pimpl_->messageStatusMtx_);
+        pimpl_->memberToStatus.clear();
+    }
 }
 
 std::string
-- 
GitLab