From 26365c938f1868e8a034ef8d38eb81be39f09c7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Sat, 23 Sep 2023 23:42:43 -0400 Subject: [PATCH] ConnectionManager: avoid duplicate IDs Change-Id: Ie56f065a58b9a5453d3b2df86cd7a7b249fac077 --- src/connectionmanager.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/connectionmanager.cpp b/src/connectionmanager.cpp index 339c8d5..67623b2 100644 --- a/src/connectionmanager.cpp +++ b/src/connectionmanager.cpp @@ -747,15 +747,16 @@ ConnectionManager::Impl::connectDevice(const std::shared_ptr<dht::crypto::Certif cb(nullptr, deviceId); return; } - dht::Value::Id vid = ValueIdDist(1, ID_MAX_VAL)(sthis->rand); + dht::Value::Id vid; auto isConnectingToDevice = false; { std::lock_guard<std::mutex> lk(sthis->connectCbsMtx_); + vid = ValueIdDist(1, ID_MAX_VAL)(sthis->rand); auto pendingsIt = sthis->pendingOperations_.find(deviceId); if (pendingsIt != sthis->pendingOperations_.end()) { const auto& pendings = pendingsIt->second; while (pendings.connecting.find(vid) != pendings.connecting.end() - && pendings.waiting.find(vid) != pendings.waiting.end()) { + || pendings.waiting.find(vid) != pendings.waiting.end()) { vid = ValueIdDist(1, ID_MAX_VAL)(sthis->rand); } } -- GitLab