From c3c57cb968d73302abb4fe02340e6d9b0cd65ae0 Mon Sep 17 00:00:00 2001 From: Mike Achtelik Date: Tue, 9 Nov 2021 15:24:16 +0100 Subject: [PATCH] QTlsBackend: Fix living QObjects after QCoreApplication shutdown MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since switching to the plugin bases system for the tls backends, Qt again retains some QObjects after QCoreApplication shutdown. This was previously fixed in QTBUG-84234, so make sure we destroy the newly introduced QObjects as well. Task-number: QTBUG-84234 Pick-to: 6.3 Change-Id: I1aaea2c90f7d55793c19259be4f9173b4befb246 Reviewed-by: MÃ¥rten Nordheim --- src/network/ssl/qsslsocket.cpp | 7 ++++++- src/network/ssl/qtlsbackend.cpp | 14 +++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 71d2595361..de92f486cd 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -3118,7 +3118,12 @@ QTlsBackend *QSslSocketPrivate::tlsBackendInUse() return nullptr; } - return tlsBackend = QTlsBackend::findBackend(activeBackendName); + tlsBackend = QTlsBackend::findBackend(activeBackendName); + QObject::connect(tlsBackend, &QObject::destroyed, [] { + const QMutexLocker locker(&backendMutex); + tlsBackend = nullptr; + }); + return tlsBackend; } /*! diff --git a/src/network/ssl/qtlsbackend.cpp b/src/network/ssl/qtlsbackend.cpp index b7d288dfa3..f119caa245 100644 --- a/src/network/ssl/qtlsbackend.cpp +++ b/src/network/ssl/qtlsbackend.cpp @@ -52,6 +52,7 @@ #include +#include "QtCore/qapplicationstatic.h" #include #include @@ -60,8 +61,8 @@ QT_BEGIN_NAMESPACE -Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, - (QTlsBackend_iid, QStringLiteral("/tls"))) +Q_APPLICATION_STATIC(QFactoryLoader, loader, QTlsBackend_iid, + QStringLiteral("/tls")) namespace { @@ -92,7 +93,7 @@ public: static QBasicMutex mutex; const QMutexLocker locker(&mutex); - if (loaded) + if (backends.size()) return true; #if QT_CONFIG(library) @@ -102,7 +103,7 @@ public: while (loader->instance(index)) ++index; - return loaded = true; + return true; } QList backendNames() @@ -139,7 +140,6 @@ public: private: std::vector backends; QMutex collectionMutex; - bool loaded = false; }; } // Unnamed namespace @@ -202,6 +202,10 @@ QTlsBackend::QTlsBackend() { if (backends()) backends->addBackend(this); + + connect(QCoreApplication::instance(), &QCoreApplication::destroyed, this, [this] { + delete this; + }); } /*!