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));