pupnp: lock after dispatch
Change-Id: I4c99192c95a82f6a5a386968075cb8991c807c8d
diff --git a/src/upnp/protocol/natpmp/nat_pmp.cpp b/src/upnp/protocol/natpmp/nat_pmp.cpp
index 633f580..c5e8ce6 100644
--- a/src/upnp/protocol/natpmp/nat_pmp.cpp
+++ b/src/upnp/protocol/natpmp/nat_pmp.cpp
@@ -115,26 +115,26 @@
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 {