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