diff --git a/src/jamidht/conversation.cpp b/src/jamidht/conversation.cpp index 7886b9576459b851535aedde74d82a65c08d9f0a..bf0e8468361398ea7faa575f985f8e0ab6b919f3 100644 --- a/src/jamidht/conversation.cpp +++ b/src/jamidht/conversation.cpp @@ -953,12 +953,8 @@ Conversation::Impl::pull() decltype(fetchingRemotes_.begin()) it; { std::lock_guard<std::mutex> lk(pullcbsMtx_); - if (pullcbs_.empty()) { - if (auto account = account_.lock()) - emitSignal<DRing::ConversationSignal::ConversationSyncFinished>( - account->getAccountID().c_str()); + if (pullcbs_.empty()) return; - } auto& elem = pullcbs_.front(); deviceId = std::move(std::get<0>(elem)); commitId = std::move(std::get<1>(elem)); diff --git a/src/jamidht/conversation_module.cpp b/src/jamidht/conversation_module.cpp index 357d532e308dee77ad41df59c0c7d32c599515b1..03b94154612b6a21ffb708484def324c9667071a 100644 --- a/src/jamidht/conversation_module.cpp +++ b/src/jamidht/conversation_module.cpp @@ -269,6 +269,7 @@ public: std::mutex replayMtx_; std::map<std::string, std::vector<std::map<std::string, std::string>>> replay_; std::map<std::string, uint64_t> refreshMessage; + std::atomic_int syncCnt {0}; }; ConversationModule::Impl::Impl(std::weak_ptr<JamiAccount>&& account, @@ -418,6 +419,7 @@ ConversationModule::Impl::fetchNewCommits(const std::string& peer, return false; } acc->addGitSocket(channel->deviceId(), conversationId, channel); + syncCnt.fetch_add(1); conversation->second->sync( peer, deviceId, @@ -438,8 +440,15 @@ ConversationModule::Impl::fetchNewCommits(const std::string& peer, deviceId.c_str(), conversationId.c_str()); } - std::lock_guard<std::mutex> lk(pendingConversationsFetchMtx_); - pendingConversationsFetch_.erase(conversationId); + { + std::lock_guard<std::mutex> lk(pendingConversationsFetchMtx_); + pendingConversationsFetch_.erase(conversationId); + } + if (syncCnt.fetch_sub(1) == 1) { + if (auto account = account_.lock()) + emitSignal<DRing::ConversationSignal::ConversationSyncFinished>( + account->getAccountID().c_str()); + } }, commitId); return true; @@ -1367,6 +1376,10 @@ ConversationModule::syncConversations(const std::string& peer, const std::string pimpl_->fetchNewCommits(peer, deviceId, cid); for (const auto& cid : toClone) pimpl_->cloneConversation(deviceId, peer, cid); + if (pimpl_->syncCnt.load() == 0) { + if (auto acc = pimpl_->account_.lock()) + emitSignal<DRing::ConversationSignal::ConversationSyncFinished>(acc->getAccountID().c_str()); + } } void