diff options
author | Janne Juntunen <janne.juntunen@qt.io> | 2022-10-21 14:43:40 +0300 |
---|---|---|
committer | Janne Juntunen <janne.juntunen@qt.io> | 2022-11-08 12:00:52 +0200 |
commit | d0fa6b32b1fac0cab77bbee8d5dd6723028f3f2e (patch) | |
tree | 2fe653d4f3832e2b8050eb601c6e658a1ecb8841 /src/networksettings/connman/qnetworksettingsmanager_p.cpp | |
parent | 10e62750a889c45661ec1827d15e21964aae1a2f (diff) |
Fix occasional segmentation fault when processing wireless networks
Disconnect signals from a service which is about to be deleted later,
so that it will not get added to the m_serviceModel list and become a
dangling pointer there later on.
Fixes: QTBUG-107561
Pick-to: 6.4 6.2 5.15
Change-Id: Ifcd99bfacda8d4a932a93d10a94fa0e1613cbe98
Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
Diffstat (limited to 'src/networksettings/connman/qnetworksettingsmanager_p.cpp')
-rw-r--r-- | src/networksettings/connman/qnetworksettingsmanager_p.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.cpp b/src/networksettings/connman/qnetworksettingsmanager_p.cpp index bc92f97..77bf66f 100644 --- a/src/networksettings/connman/qnetworksettingsmanager_p.cpp +++ b/src/networksettings/connman/qnetworksettingsmanager_p.cpp @@ -260,11 +260,21 @@ void QNetworkSettingsManagerPrivate::onServicesChanged(ConnmanMapStructList chan emit q->servicesChanged(); if (auto service = m_unnamedServices.take(path)) - if (!service->placeholderState()) + if (!service->placeholderState()) { + disconnect(service, &QNetworkSettingsService::nameChanged, + this, &QNetworkSettingsManagerPrivate::serviceReady); + disconnect(service, &QNetworkSettingsService::typeChanged, + this, &QNetworkSettingsManagerPrivate::serviceReady); service->deleteLater(); + } if (auto service = m_unknownServices.take(path)) - if (!service->placeholderState()) + if (!service->placeholderState()) { + disconnect(service, &QNetworkSettingsService::nameChanged, + this, &QNetworkSettingsManagerPrivate::serviceReady); + disconnect(service, &QNetworkSettingsService::typeChanged, + this, &QNetworkSettingsManagerPrivate::serviceReady); service->deleteLater(); + } m_unnamedServicesForSsidConnection.remove(path); // do not delete here } |