From 2dddb22c5bc8974e1c831b5d150b747b465e9e54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Wed, 28 Dec 2022 16:05:39 -0500 Subject: [PATCH] turn_cache: cancel refresh on destruction Change-Id: I617fb2e53142ed94806a46aef5c62f04197066b1 --- src/connectivity/turn_cache.cpp | 25 ++++++++++++++++++------- src/sip/sipaccountbase.cpp | 3 +-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/connectivity/turn_cache.cpp b/src/connectivity/turn_cache.cpp index ed7783c993..3b07fd5903 100644 --- a/src/connectivity/turn_cache.cpp +++ b/src/connectivity/turn_cache.cpp @@ -40,14 +40,19 @@ TurnCache::TurnCache(const std::string& accountId, std::chrono::steady_clock::now()); onConnectedTimer_ = std::make_unique<asio::steady_timer>(*io_context, std::chrono::steady_clock::now()); - reconfigure(params, enabled); } TurnCache::~TurnCache() { { std::lock_guard<std::mutex> lock(shutdownMtx_); - onConnectedTimer_->cancel(); - onConnectedTimer_.reset(); + if (refreshTimer_) { + refreshTimer_->cancel(); + refreshTimer_.reset(); + } + if (onConnectedTimer_) { + onConnectedTimer_->cancel(); + onConnectedTimer_.reset(); + } } { std::lock_guard<std::mutex> lock(cachedTurnMutex_); @@ -83,8 +88,11 @@ TurnCache::reconfigure(const TurnTransportParams& params, bool enabled) testTurnV4_.reset(); testTurnV6_.reset(); } - refreshTimer_->expires_at(std::chrono::steady_clock::now()); - refreshTimer_->async_wait(std::bind(&TurnCache::refresh, this, std::placeholders::_1)); + std::lock_guard<std::mutex> lock(shutdownMtx_); + if (refreshTimer_) { + refreshTimer_->expires_at(std::chrono::steady_clock::now()); + refreshTimer_->async_wait(std::bind(&TurnCache::refresh, shared_from_this(), std::placeholders::_1)); + } } void @@ -214,9 +222,12 @@ TurnCache::refreshTurnDelay(bool scheduleNext) { isRefreshing_ = false; if (scheduleNext) { + std::lock_guard<std::mutex> lock(shutdownMtx_); JAMI_WARNING("[Account {:s}] Cache for TURN resolution failed.", accountId_); - refreshTimer_->expires_at(std::chrono::steady_clock::now() + turnRefreshDelay_); - refreshTimer_->async_wait(std::bind(&TurnCache::refresh, shared_from_this(), std::placeholders::_1)); + if (refreshTimer_) { + refreshTimer_->expires_at(std::chrono::steady_clock::now() + turnRefreshDelay_); + refreshTimer_->async_wait(std::bind(&TurnCache::refresh, shared_from_this(), std::placeholders::_1)); + } if (turnRefreshDelay_ < std::chrono::minutes(30)) turnRefreshDelay_ *= 2; } else { diff --git a/src/sip/sipaccountbase.cpp b/src/sip/sipaccountbase.cpp index fa3609aa81..8dc78cc717 100644 --- a/src/sip/sipaccountbase.cpp +++ b/src/sip/sipaccountbase.cpp @@ -154,9 +154,8 @@ SIPAccountBase::loadConfig() cachePath, turnParams, conf.turnEnabled); - } else { - turnCache_->reconfigure(turnParams, conf.turnEnabled); } + turnCache_->reconfigure(turnParams, conf.turnEnabled); } std::map<std::string, std::string> -- GitLab