From 40b882d1762bf75986b94e33a4752f637352e016 Mon Sep 17 00:00:00 2001 From: Janne Juntunen Date: Fri, 21 Oct 2022 14:43:40 +0300 Subject: 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 (cherry picked from commit d0fa6b32b1fac0cab77bbee8d5dd6723028f3f2e) Reviewed-by: Qt Cherry-pick Bot --- src/networksettings/connman/qnetworksettingsmanager_p.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.cpp b/src/networksettings/connman/qnetworksettingsmanager_p.cpp index 4503f4d..36dddfe 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 } -- cgit v1.2.3