diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp
index a29495fb479f4bd3e1655d0cebb92da0216c246e..add30dc23b823de64e96b94fdf33cbfa46639d4a 100644
--- a/tools/dhtnode.cpp
+++ b/tools/dhtnode.cpp
@@ -578,15 +578,19 @@ main(int argc, char **argv)
     std::mutex m;
     bool done {false};
 
-    node->shutdown([&]()
-    {
-        done = true;
+    node->shutdown([&]() {
+        {
+            std::lock_guard<std::mutex> lk(m);
+            done = true;
+        }
         cv.notify_all();
     });
 
     // wait for shutdown
-    std::unique_lock<std::mutex> lk(m);
-    cv.wait(lk, [&](){ return done; });
+    {
+        std::unique_lock<std::mutex> lk(m);
+        cv.wait(lk, [&](){ return done; });
+    }
 
     node->join();
 #ifdef WIN32_NATIVE