Fix living QObject member after shutdown of QCoreApplication
QHostInfoLookupManager has a QThreadPool as member. QThreadPool is a QObject and must be deleted if the QCoreApplication is being destroyed to release the underlying ThreadData. A Q_GLOBAL_STATIC won't release any memory is not able to manually release it. Pick-to: 5.15 Task-number: QTBUG-84234 Change-Id: I96be4601c3af38fa7c753a6f7acb8273ee277a27 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
parent
0fb1774a0a
commit
7e5a803c08
@ -71,8 +71,6 @@ QT_BEGIN_NAMESPACE
|
|||||||
|
|
||||||
//#define QHOSTINFO_DEBUG
|
//#define QHOSTINFO_DEBUG
|
||||||
|
|
||||||
Q_GLOBAL_STATIC(QHostInfoLookupManager, theHostInfoLookupManager)
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
struct ToBeLookedUpEquals {
|
struct ToBeLookedUpEquals {
|
||||||
typedef bool result_type;
|
typedef bool result_type;
|
||||||
@ -101,6 +99,25 @@ std::pair<OutputIt1, OutputIt2> separate_if(InputIt first, InputIt last, OutputI
|
|||||||
return std::make_pair(dest1, dest2);
|
return std::make_pair(dest1, dest2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QHostInfoLookupManager* theHostInfoLookupManager()
|
||||||
|
{
|
||||||
|
static QHostInfoLookupManager* theManager = nullptr;
|
||||||
|
static QBasicMutex theMutex;
|
||||||
|
|
||||||
|
const QMutexLocker locker(&theMutex);
|
||||||
|
if (theManager == nullptr) {
|
||||||
|
theManager = new QHostInfoLookupManager();
|
||||||
|
Q_ASSERT(QCoreApplication::instance());
|
||||||
|
QObject::connect(QCoreApplication::instance(), &QCoreApplication::destroyed, [] {
|
||||||
|
const QMutexLocker locker(&theMutex);
|
||||||
|
delete theManager;
|
||||||
|
theManager = nullptr;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return theManager;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user