diff --git a/src/connectionmanager.cpp b/src/connectionmanager.cpp
index a341b95f997f724c246e2b889323b28f7ea1a8b1..45dc64caa6eb3c114e1ecd90e8a89751168070a6 100644
--- a/src/connectionmanager.cpp
+++ b/src/connectionmanager.cpp
@@ -980,15 +980,16 @@ ConnectionManager::Impl::startConnection(const std::shared_ptr<DeviceInfo>& di,
     auto eraseInfo = [w = weak_from_this(), diw=std::weak_ptr(di), vid] {
         if (auto di = diw.lock()) {
             std::unique_lock lk(di->mutex_);
-            di->info.erase(vid);
-            auto ops = di->extractPendingOperations(vid, nullptr);
-            if (di->empty()) {
-                if (auto shared = w.lock())
-                    shared->infos_.removeDeviceInfo(di->deviceId);
+            if (di->info.erase(vid)) {
+                auto ops = di->extractPendingOperations(vid, nullptr);
+                if (di->empty()) {
+                    if (auto shared = w.lock())
+                        shared->infos_.removeDeviceInfo(di->deviceId);
+                }
+                lk.unlock();
+                for (const auto& op: ops)
+                    op.cb(nullptr, di->deviceId);
             }
-            lk.unlock();
-            for (const auto& op: ops)
-                op.cb(nullptr, di->deviceId);
         }
     };