diff options
Diffstat (limited to 'src')
| -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 71d25953618..de92f486cda 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 b7d288dfa36..f119caa245f 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; + }); } /*! |
