summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJanne Juntunen <janne.juntunen@qt.io>2022-10-21 14:43:40 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-11-08 10:25:32 +0000
commitd39f075c197e08527e8993163af1ef87bcda8436 (patch)
treeba66fd57571cfd569d8b00d64a5aad7a9f341898
parent004026b5f4c6f21c339bc88b58ddcf2e2e6ff1b2 (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 Change-Id: Ifcd99bfacda8d4a932a93d10a94fa0e1613cbe98 Reviewed-by: Samuli Piippo <samuli.piippo@qt.io> (cherry picked from commit d0fa6b32b1fac0cab77bbee8d5dd6723028f3f2e) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/networksettings/connman/qnetworksettingsmanager_p.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.cpp b/src/networksettings/connman/qnetworksettingsmanager_p.cpp
index 770cb44..8719a7f 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
}