From eb4213d3a1c3b60ee9c3befd8e84cb7eea78daf6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Mon, 27 May 2024 09:54:36 -0400
Subject: [PATCH] swarm_manager: avoid deadlock in shutdown

shutdown can cause the needSocketCb_ to pass a null socket. In this
case we can directly return instead of locking

GitLab: #995
Change-Id: I8ad744e494ea0bd3fe15f221a09feeb44e9aec83
---
 src/jamidht/swarm/swarm_manager.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/jamidht/swarm/swarm_manager.cpp b/src/jamidht/swarm/swarm_manager.cpp
index 2a6bc0d89b..c680a3df72 100644
--- a/src/jamidht/swarm/swarm_manager.cpp
+++ b/src/jamidht/swarm/swarm_manager.cpp
@@ -339,7 +339,7 @@ SwarmManager::tryConnect(const NodeId& nodeId)
         needSocketCb_(nodeId.toString(),
                       [w = weak(), nodeId](const std::shared_ptr<dhtnet::ChannelSocketInterface>& socket) {
                           auto shared = w.lock();
-                          if (!shared)
+                          if (!shared || shared->isShutdown_)
                               return true;
                           if (socket) {
                               shared->addChannel(socket);
-- 
GitLab