From 90766f95a36e030e36f89c05e7781cb3d6b09fc6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?=
 <francois-simon.fauteux-chapleau@savoirfairelinux.com>
Date: Wed, 5 Jun 2024 11:24:55 -0400
Subject: [PATCH] conversation: fix bug related to use of shut down swarm
 manager

The SwarmManager class uses the 'isShutdown_' variable to keep track of
whether it has been shut down or not. This variable needs to be reset to
false if we want to restart using a SwarmManager after it was shut down,
which we sometimes do when bootstrapping a conversation.

This patch fixes a failure in
ConversationRequestTest::testBanContactRestartAccount that was
introduced by commit eb4213d3a1c3b60ee9c3befd8e84cb7eea78daf6.
GitLab: #1002

Change-Id: If5d295cbae4edd9e2292d7464e2eb2939b05eedb
---
 src/jamidht/conversation.cpp        | 1 +
 src/jamidht/swarm/swarm_manager.cpp | 6 ++++++
 src/jamidht/swarm/swarm_manager.h   | 8 ++++++++
 3 files changed, 15 insertions(+)

diff --git a/src/jamidht/conversation.cpp b/src/jamidht/conversation.cpp
index 18adc67476..9146ed0ea7 100644
--- a/src/jamidht/conversation.cpp
+++ b/src/jamidht/conversation.cpp
@@ -2339,6 +2339,7 @@ Conversation::bootstrap(std::function<void()> onBootstraped,
     pimpl_->checkedMembers_.clear();
     // If is shutdown, the conversation was re-added, causing no new nodes to be connected, but just a classic connectivity change
     if (pimpl_->swarmManager_->isShutdown()) {
+        pimpl_->swarmManager_->restart();
         pimpl_->swarmManager_->maintainBuckets();
     } else if (!pimpl_->swarmManager_->setKnownNodes(devices)) {
         fallback(this, true);
diff --git a/src/jamidht/swarm/swarm_manager.cpp b/src/jamidht/swarm/swarm_manager.cpp
index c680a3df72..832e1b2b04 100644
--- a/src/jamidht/swarm/swarm_manager.cpp
+++ b/src/jamidht/swarm/swarm_manager.cpp
@@ -146,6 +146,12 @@ SwarmManager::shutdown()
     routing_table.shutdownAllNodes();
 }
 
+void
+SwarmManager::restart()
+{
+    isShutdown_ = false;
+}
+
 bool
 SwarmManager::addKnownNode(const NodeId& nodeId)
 {
diff --git a/src/jamidht/swarm/swarm_manager.h b/src/jamidht/swarm/swarm_manager.h
index 93bcb84408..e35f39e174 100644
--- a/src/jamidht/swarm/swarm_manager.h
+++ b/src/jamidht/swarm/swarm_manager.h
@@ -112,6 +112,14 @@ public:
      */
     void shutdown();
 
+    /**
+     * Restart the swarm manager.
+     *
+     * This function must be called in situations where we want
+     * to use a swarm manager that was previously shut down.
+     */
+    void restart();
+
     /**
      * Display swarm manager info
      */
-- 
GitLab