diff options
author | Mike Achtelik <mike.achtelik@gmail.com> | 2021-11-09 15:24:16 +0100 |
---|---|---|
committer | Mike Achtelik <mike.achtelik@gmail.com> | 2022-01-13 22:12:32 +0100 |
commit | c3c57cb968d73302abb4fe02340e6d9b0cd65ae0 (patch) | |
tree | 7aea0eae8ad4240c5ac6c8651569839cb14367ba /src/network/ssl | |
parent | 4cc1d81d79da912fefe1cd36fcde159e1bbd31e5 (diff) |
QTlsBackend: Fix living QObjects after QCoreApplication shutdown
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 <marten.nordheim@qt.io>
Diffstat (limited to 'src/network/ssl')
-rw-r--r-- | src/network/ssl/qsslsocket.cpp | 7 | ||||
-rw-r--r-- | 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 <QtCore/private/qfactoryloader_p.h> +#include "QtCore/qapplicationstatic.h" #include <QtCore/qbytearray.h> #include <QtCore/qmutex.h> @@ -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<QString> backendNames() @@ -139,7 +140,6 @@ public: private: std::vector<QTlsBackend *> 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; + }); } /*! |