From ee81e1acf48bfb80ffaba6ab657da6154252ce81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 26 Aug 2022 10:57:42 +0200 Subject: [PATCH] Simplify QNetworkListManagerNetworkInformationBackend's COM handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The class used to be implicitly movable to a different thread, but this is no longer the case, so we don't need to initialize and uninitialize the COM library in start() and stop(). A qFatal has been added to ensure we detect if this will be required again. Change-Id: Ib22fe0bdcd5cb96f05632b09803c5de8ff43279a Reviewed-by: Oliver Wolff Reviewed-by: MÃ¥rten Nordheim --- ...rklistmanagernetworkinformationbackend.cpp | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/src/plugins/networkinformation/networklistmanager/qnetworklistmanagernetworkinformationbackend.cpp b/src/plugins/networkinformation/networklistmanager/qnetworklistmanagernetworkinformationbackend.cpp index d5582ebb30c..6862077abaf 100644 --- a/src/plugins/networkinformation/networklistmanager/qnetworklistmanagernetworkinformationbackend.cpp +++ b/src/plugins/networkinformation/networklistmanager/qnetworklistmanagernetworkinformationbackend.cpp @@ -143,6 +143,7 @@ QNetworkListManagerNetworkInformationBackend::~QNetworkListManagerNetworkInforma if (comInitFailed) return; stop(); + CoUninitialize(); } void QNetworkListManagerNetworkInformationBackend::setConnectivity(NLM_CONNECTIVITY newConnectivity) @@ -164,11 +165,8 @@ void QNetworkListManagerNetworkInformationBackend::checkCaptivePortal() bool QNetworkListManagerNetworkInformationBackend::event(QEvent *event) { - if (event->type() == QEvent::ThreadChange && monitoring) { - stop(); - QMetaObject::invokeMethod(this, &QNetworkListManagerNetworkInformationBackend::start, - Qt::QueuedConnection); - } + if (event->type() == QEvent::ThreadChange) + qFatal("Moving QNetworkListManagerNetworkInformationBackend to different thread is not supported"); return QObject::event(event); } @@ -177,15 +175,9 @@ bool QNetworkListManagerNetworkInformationBackend::start() { Q_ASSERT(!monitoring); - if (comInitFailed) { - auto hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); - if (FAILED(hr)) { - qCWarning(lcNetInfoNLM) << "Failed to initialize COM:" << errorStringFromHResult(hr); - comInitFailed = true; - return false; - } - comInitFailed = false; - } + if (comInitFailed) + return false; + if (!managerEvents) managerEvents = new QNetworkListManagerEvents(); @@ -203,9 +195,6 @@ void QNetworkListManagerNetworkInformationBackend::stop() monitoring = false; managerEvents.Reset(); } - - CoUninitialize(); - comInitFailed = true; // we check this value in start() to see if we need to re-initialize } QT_END_NAMESPACE