From dbbfdaab0f4119abf79646313e0dbc52881dcd56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Wed, 27 Oct 2021 13:38:22 -0400 Subject: [PATCH] proxyclient: onConnectedCallbacks must be launched if started by notif --- include/opendht/dht_proxy_client.h | 1 + src/dht_proxy_client.cpp | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/opendht/dht_proxy_client.h b/include/opendht/dht_proxy_client.h index b4b45090..12fb4c8a 100644 --- a/include/opendht/dht_proxy_client.h +++ b/include/opendht/dht_proxy_client.h @@ -337,6 +337,7 @@ private: NodeStats stats6_ {}; SockAddr publicAddressV4_; SockAddr publicAddressV6_; + std::atomic_bool launchConnectedCbs_ {false}; InfoHash myid {}; diff --git a/src/dht_proxy_client.cpp b/src/dht_proxy_client.cpp index f713d4b3..626fdcdd 100644 --- a/src/dht_proxy_client.cpp +++ b/src/dht_proxy_client.cpp @@ -720,7 +720,8 @@ DhtProxyClient::onProxyInfos(const Json::Value& proxyInfos, const sa_family_t fa } auto newStatus = std::max(statusIpv4_, statusIpv6_); if (newStatus == NodeStatus::Connected) { - if (oldStatus == NodeStatus::Disconnected || oldStatus == NodeStatus::Connecting) { + if (oldStatus == NodeStatus::Disconnected || oldStatus == NodeStatus::Connecting || launchConnectedCbs_) { + launchConnectedCbs_ = false; listenerRestartTimer_->expires_at(std::chrono::steady_clock::now()); listenerRestartTimer_->async_wait(std::bind(&DhtProxyClient::restartListeners, this, std::placeholders::_1)); if (not onConnectCallbacks_.empty()) { @@ -1160,6 +1161,9 @@ DhtProxyClient::pushNotificationReceived(const std::map<std::string, std::string { // If a push notification is received, the proxy is up and running std::lock_guard<std::mutex> l(lockCurrentProxyInfos_); + auto oldStatus = std::max(statusIpv4_, statusIpv6_); + if (oldStatus != NodeStatus::Connected) + launchConnectedCbs_ = true; statusIpv4_ = NodeStatus::Connected; statusIpv6_ = NodeStatus::Connected; } -- GitLab