summaryrefslogtreecommitdiffstats
path: root/src/network/ssl
diff options
context:
space:
mode:
authorMike Achtelik <mike.achtelik@gmail.com>2021-11-09 15:24:16 +0100
committerMike Achtelik <mike.achtelik@gmail.com>2022-01-13 22:12:32 +0100
commitc3c57cb968d73302abb4fe02340e6d9b0cd65ae0 (patch)
tree7aea0eae8ad4240c5ac6c8651569839cb14367ba /src/network/ssl
parent4cc1d81d79da912fefe1cd36fcde159e1bbd31e5 (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.cpp7
-rw-r--r--src/network/ssl/qtlsbackend.cpp14
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;
+ });
}
/*!