diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp
index b43854bed771ba42034c9a96f5fc2ea96103393d..0157f631b69f462452f10e9e32f570d9fce87f71 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);
     }