From ae2445fd0758c4b8f98d4cc6210f7c3d9e4d12b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Fri, 16 Apr 2021 15:01:23 -0400 Subject: [PATCH] proxy client: schedule connectCallbacks in callback queue --- src/dht_proxy_client.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/dht_proxy_client.cpp b/src/dht_proxy_client.cpp index 17528bbd..5f4e99f3 100644 --- a/src/dht_proxy_client.cpp +++ b/src/dht_proxy_client.cpp @@ -723,10 +723,15 @@ DhtProxyClient::onProxyInfos(const Json::Value& proxyInfos, const sa_family_t fa if (oldStatus == NodeStatus::Disconnected || oldStatus == NodeStatus::Connecting) { listenerRestartTimer_->expires_at(std::chrono::steady_clock::now()); listenerRestartTimer_->async_wait(std::bind(&DhtProxyClient::restartListeners, this, std::placeholders::_1)); - while (not onConnectCallbacks_.empty()) { - auto cb = std::move(onConnectCallbacks_.front()); - onConnectCallbacks_.pop(); - cb(); + if (not onConnectCallbacks_.empty()) { + std::lock_guard<std::mutex> lock(lockCallbacks_); + callbacks_.emplace_back([this] { + while (not onConnectCallbacks_.empty()) { + auto cb = std::move(onConnectCallbacks_.front()); + onConnectCallbacks_.pop(); + cb(); + } + }); } } nextProxyConfirmationTimer_->expires_at(std::chrono::steady_clock::now() + std::chrono::minutes(15)); -- GitLab