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