diff --git a/src/upnp/protocol/natpmp/nat_pmp.cpp b/src/upnp/protocol/natpmp/nat_pmp.cpp
index 633f5807ce510fc53662759a74a337332232a70d..c5e8ce6de029feb739b3f8c634636de5dc8e98aa 100644
--- a/src/upnp/protocol/natpmp/nat_pmp.cpp
+++ b/src/upnp/protocol/natpmp/nat_pmp.cpp
@@ -115,26 +115,26 @@ NatPmp::setObserver(UpnpMappingObserver* obs)
 void
 NatPmp::terminate(std::condition_variable& cv)
 {
+    if (logger_) logger_->debug("NAT-PMP: Terminate instance {}", fmt::ptr(this));
+
     initialized_ = false;
     observer_ = nullptr;
 
-    {
-        std::lock_guard<std::mutex> lock(natpmpMutex_);
-        shutdownComplete_ = true;
-        cv.notify_one();
-    }
+    std::lock_guard<std::mutex> lock(natpmpMutex_);
+    shutdownComplete_ = true;
+    cv.notify_one();
 }
 
 void
 NatPmp::terminate()
 {
-    std::unique_lock<std::mutex> lk(natpmpMutex_);
     std::condition_variable cv {};
 
     ioContext->dispatch([&] {
         terminate(cv);
     });
 
+    std::unique_lock<std::mutex> lk(natpmpMutex_);
     if (cv.wait_for(lk, std::chrono::seconds(10), [this] { return shutdownComplete_; })) {
         if (logger_) logger_->debug("NAT-PMP: Shutdown completed");
     } else {
diff --git a/src/upnp/protocol/pupnp/pupnp.cpp b/src/upnp/protocol/pupnp/pupnp.cpp
index d1feed9a3df11901e4db0f06565d12b3b2f54092..8db05170fb16201a73dbcc851d61c9026becf5cb 100644
--- a/src/upnp/protocol/pupnp/pupnp.cpp
+++ b/src/upnp/protocol/pupnp/pupnp.cpp
@@ -208,24 +208,21 @@ PUPnP::terminate(std::condition_variable& cv)
     // Clear all the lists.
     discoveredIgdList_.clear();
 
-    {
-        std::lock_guard<std::mutex> lock(pupnpMutex_);
-        validIgdList_.clear();
-        shutdownComplete_ = true;
-        cv.notify_one();
-    }
+    std::lock_guard<std::mutex> lock(pupnpMutex_);
+    validIgdList_.clear();
+    shutdownComplete_ = true;
+    cv.notify_one();
 }
 
 void
 PUPnP::terminate()
 {
-    std::unique_lock<std::mutex> lk(pupnpMutex_);
     std::condition_variable cv {};
-
     ioContext->dispatch([&] {
         terminate(cv);
     });
 
+    std::unique_lock<std::mutex> lk(pupnpMutex_);
     if (cv.wait_for(lk, std::chrono::seconds(10), [this] { return shutdownComplete_; })) {
         if (logger_) logger_->debug("PUPnP: Shutdown completed");
     } else {