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