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