From c8a0b443f3117e2fa1343d2cb3c091f502b1a24e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Thu, 3 Jun 2021 16:50:35 -0400
Subject: [PATCH] dhtrunner: force execution of pending ops on shutdown

---
 src/dhtrunner.cpp | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp
index b43854be..0157f631 100644
--- a/src/dhtrunner.cpp
+++ b/src/dhtrunner.cpp
@@ -294,6 +294,11 @@ DhtRunner::shutdown(ShutdownCallback cb, bool stop) {
         if (dht_)
             dht_->shutdown(onShutdown, stop);
     });
+    // Force execution of pending ops
+    if (getStatus() == NodeStatus::Connecting) {
+        status4 = NodeStatus::Disconnected;
+        status6 = NodeStatus::Disconnected;
+    }
     cv.notify_all();
 }
 
@@ -368,6 +373,7 @@ DhtRunner::join()
     {
         std::lock_guard<std::mutex> lck(dht_mtx);
         resetDht();
+        std::lock_guard<std::mutex> lck2(storage_mtx);
         status4 = NodeStatus::Disconnected;
         status6 = NodeStatus::Disconnected;
     }
@@ -703,8 +709,11 @@ DhtRunner::loop_()
     NodeStatus nstatus4 = dht->updateStatus(AF_INET);
     NodeStatus nstatus6 = dht->updateStatus(AF_INET6);
     if (nstatus4 != status4 || nstatus6 != status6) {
-        status4 = nstatus4;
-        status6 = nstatus6;
+        {
+            std::lock_guard<std::mutex> lck(storage_mtx);
+            status4 = nstatus4;
+            status6 = nstatus6;
+        }
         if (statusCb)
             statusCb(status4, status6);
     }
-- 
GitLab