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); }