Skip to content
Snippets Groups Projects
Commit d1e018ca authored by Sébastien Blin's avatar Sébastien Blin
Browse files

natpmp: pass shared pointer to timer to avoid crash

Change-Id: I1fbf84f8fb10b14390abb951b8ed312716047936
parent c453ca7f
No related branches found
No related tags found
No related merge requests found
...@@ -186,9 +186,11 @@ NatPmp::searchForIgd() ...@@ -186,9 +186,11 @@ NatPmp::searchForIgd()
// Cancel the current timer (if any) and re-schedule. // Cancel the current timer (if any) and re-schedule.
searchForIgdTimer_.expires_after(NATPMP_SEARCH_RETRY_UNIT * igdSearchCounter_); searchForIgdTimer_.expires_after(NATPMP_SEARCH_RETRY_UNIT * igdSearchCounter_);
searchForIgdTimer_.async_wait([this](const asio::error_code& ec) { searchForIgdTimer_.async_wait([w=weak()](const asio::error_code& ec) {
if (!ec) if (!ec) {
searchForIgd(); if (auto shared = w.lock())
shared->searchForIgd();
}
}); });
} else { } else {
if (logger_) logger_->warn("NAT-PMP: Setup failed after {} trials. NAT-PMP will be disabled!", if (logger_) logger_->warn("NAT-PMP: Setup failed after {} trials. NAT-PMP will be disabled!",
......
...@@ -149,6 +149,13 @@ private: ...@@ -149,6 +149,13 @@ private:
// Shutdown synchronization // Shutdown synchronization
bool shutdownComplete_ {false}; bool shutdownComplete_ {false};
// Asio :(
// https://stackoverflow.com/questions/35507956/is-it-safe-to-destroy-boostasio-timer-from-its-handler-or-handler-dtor
std::weak_ptr<NatPmp> weak()
{
return std::static_pointer_cast<NatPmp>(shared_from_this());
}
}; };
} // namespace upnp } // namespace upnp
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment