diff --git a/src/dht_proxy_client.cpp b/src/dht_proxy_client.cpp
index 17528bbdc78fbe802f5a58094818a4a7487444bd..5f4e99f38d6cbb3d901d41a87b4b150b615aa79e 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));