From 9d3514e0874b4fea12e1926bf887eb03fd5ac8f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Wed, 26 Oct 2016 17:38:45 -0400
Subject: [PATCH] dhtrunner: don't run ops if disconnected and bootstraping

---
 src/dhtrunner.cpp | 17 +++++------------
 1 file changed, 5 insertions(+), 12 deletions(-)

diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp
index 2d99e687..a7d41cf0 100644
--- a/src/dhtrunner.cpp
+++ b/src/dhtrunner.cpp
@@ -106,7 +106,8 @@ DhtRunner::run(const sockaddr_in* local4, const sockaddr_in6* local6, DhtRunner:
                     std::lock_guard<std::mutex> lck(storage_mtx);
                     if (not pending_ops_prio.empty())
                         return true;
-                    if (not pending_ops.empty() and getStatus() != NodeStatus::Connecting)
+                    auto s = getStatus();
+                    if (not pending_ops.empty() and (s == NodeStatus::Connected or (s == NodeStatus::Disconnected and not bootstraping)))
                         return true;
                 }
                 return false;
@@ -305,22 +306,14 @@ DhtRunner::loop_()
     decltype(pending_ops) ops {};
     {
         std::lock_guard<std::mutex> lck(storage_mtx);
-        ops = std::move(pending_ops_prio);
+        auto s = getStatus();
+        ops = (pending_ops_prio.empty() && (s == NodeStatus::Connected or (s == NodeStatus::Disconnected and not bootstraping))) ?
+               std::move(pending_ops) : std::move(pending_ops_prio);
     }
     while (not ops.empty()) {
         ops.front()(*dht_);
         ops.pop();
     }
-    if (getStatus() != NodeStatus::Connecting) {
-        {
-            std::lock_guard<std::mutex> lck(storage_mtx);
-            ops = std::move(pending_ops);
-        }
-        while (not ops.empty()) {
-            ops.front()(*dht_);
-            ops.pop();
-        }
-    }
 
     time_point wakeup {};
     decltype(rcv) received {};
-- 
GitLab