upnp: stop asio context out of the loop
Change-Id: Iaee6527de1a599d6c79ef494637fb968a3035bbb
diff --git a/src/upnp/upnp_context.cpp b/src/upnp/upnp_context.cpp
index 09f441e..8b80293 100644
--- a/src/upnp/upnp_context.cpp
+++ b/src/upnp/upnp_context.cpp
@@ -45,9 +45,9 @@
UPnPContext::UPnPContext(const std::shared_ptr<asio::io_context>& ioContext, const std::shared_ptr<dht::log::Logger>& logger)
: ctx(createIoContext(ioContext, logger))
+ , logger_(logger)
, mappingListUpdateTimer_(*ctx)
, connectivityChangedTimer_(*ctx)
- , logger_(logger)
{
if (logger_) logger_->debug("Creating UPnPContext instance [{}]", fmt::ptr(this));
@@ -88,22 +88,13 @@
proto->terminate();
}
- {
- std::lock_guard<std::mutex> lock(mappingMutex_);
- mappingList_->clear();
- mappingListUpdateTimer_.cancel();
- controllerList_.clear();
- protocolList_.clear();
- shutdownComplete_ = true;
- cv.notify_one();
- }
-
- if (ioContextRunner_) {
- if (logger_) logger_->debug("UPnPContext: stopping io_context thread");
- ctx->stop();
- ioContextRunner_->join();
- ioContextRunner_.reset();
- }
+ std::lock_guard<std::mutex> lock(mappingMutex_);
+ mappingList_->clear();
+ mappingListUpdateTimer_.cancel();
+ controllerList_.clear();
+ protocolList_.clear();
+ shutdownComplete_ = true;
+ cv.notify_one();
}
void
@@ -121,6 +112,13 @@
} else {
if (logger_) logger_->error("Shutdown timed-out");
}
+
+ if (ioContextRunner_) {
+ if (logger_) logger_->debug("UPnPContext: stopping io_context thread");
+ ctx->stop();
+ ioContextRunner_->join();
+ ioContextRunner_.reset();
+ }
}
UPnPContext::~UPnPContext()