diff --git a/plugins/bluetooth/componments/adaptersmanager.cpp b/plugins/bluetooth/componments/adaptersmanager.cpp index 2421d8e8f..6afbaa532 100644 --- a/plugins/bluetooth/componments/adaptersmanager.cpp +++ b/plugins/bluetooth/componments/adaptersmanager.cpp @@ -150,6 +150,10 @@ void AdaptersManager::onAdapterPropertiesChanged(const QString &json) const QString id = obj["Path"].toString(); QDBusObjectPath dPath(id); + if (!m_adapters.contains(id)) { + return; + } + Adapter *adapter = const_cast(m_adapters[id]); if (adapter) { inflateAdapter(adapter, obj); @@ -180,6 +184,10 @@ void AdaptersManager::removeAdapter(const QString &json) QJsonObject obj = doc.object(); const QString id = obj["Path"].toString(); + if (!m_adapters.contains(id)) { + return; + } + const Adapter *result = m_adapters[id]; Adapter *adapter = const_cast(result); if (adapter) { @@ -196,6 +204,10 @@ void AdaptersManager::addDevice(const QString &json) const QString adapterId = obj["AdapterPath"].toString(); const QString deviceId = obj["Path"].toString(); + if (!m_adapters.contains(adapterId)) { + return; + } + const Adapter *result = m_adapters[adapterId]; Adapter *adapter = const_cast(result); if (adapter) { @@ -214,6 +226,10 @@ void AdaptersManager::removeDevice(const QString &json) const QString adapterId = obj["AdapterPath"].toString(); const QString deviceId = obj["Path"].toString(); + if (!m_adapters.contains(adapterId)) { + return; + } + const Adapter *result = m_adapters[adapterId]; Adapter *adapter = const_cast(result); if (adapter) { @@ -247,11 +263,11 @@ void AdaptersManager::adapterAdd(Adapter *adapter, const QJsonObject &adpterObj) QString id = adapter->id(); if (!id.isEmpty()) { - // in case memory leaks - if (m_adapters.contains(id)) { - return; + if (!m_adapters.contains(id)) { + m_adapters[id] = adapter; + } else if (m_adapters[id] == nullptr) { + m_adapters[id] = adapter; } - m_adapters[id] = adapter; } }