summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/network/kernel/qdnslookup.cpp55
-rw-r--r--src/network/kernel/qdnslookup_p.h16
2 files changed, 18 insertions, 53 deletions
diff --git a/src/network/kernel/qdnslookup.cpp b/src/network/kernel/qdnslookup.cpp
index 4f991fd7e36..f77d31a16fa 100644
--- a/src/network/kernel/qdnslookup.cpp
+++ b/src/network/kernel/qdnslookup.cpp
@@ -5,6 +5,7 @@
#include "qdnslookup.h"
#include "qdnslookup_p.h"
+#include <qapplicationstatic.h>
#include <qcoreapplication.h>
#include <qdatetime.h>
#include <qrandom.h>
@@ -14,7 +15,18 @@
QT_BEGIN_NAMESPACE
-Q_GLOBAL_STATIC(QDnsLookupThreadPool, theDnsLookupThreadPool);
+namespace {
+struct QDnsLookupThreadPool : QThreadPool
+{
+ QDnsLookupThreadPool()
+ {
+ // Run up to 5 lookups in parallel.
+ setMaxThreadCount(5);
+ }
+};
+}
+
+Q_APPLICATION_STATIC(QDnsLookupThreadPool, theDnsLookupThreadPool);
static bool qt_qdnsmailexchangerecord_less_than(const QDnsMailExchangeRecord &r1, const QDnsMailExchangeRecord &r2)
{
@@ -531,6 +543,11 @@ void QDnsLookup::lookup()
Q_D(QDnsLookup);
d->isFinished = false;
d->reply = QDnsLookupReply();
+ if (!QCoreApplication::instance()) {
+ qWarning("QDnsLookup requires a QCoreApplication");
+ return;
+ }
+
auto l = [this](const QDnsLookupReply &reply) {
Q_D(QDnsLookup);
if (d->runnable == sender()) {
@@ -1056,42 +1073,6 @@ void QDnsLookupRunnable::run()
emit finished(reply);
}
-QDnsLookupThreadPool::QDnsLookupThreadPool()
- : signalsConnected(false)
-{
- // Run up to 5 lookups in parallel.
- setMaxThreadCount(5);
-}
-
-void QDnsLookupThreadPool::start(QRunnable *runnable)
-{
- // Ensure threads complete at application destruction.
- if (!signalsConnected) {
- QMutexLocker signalsLocker(&signalsMutex);
- if (!signalsConnected) {
- QCoreApplication *app = QCoreApplication::instance();
- if (!app) {
- qWarning("QDnsLookup requires a QCoreApplication");
- delete runnable;
- return;
- }
-
- moveToThread(app->thread());
- connect(app, SIGNAL(destroyed()),
- SLOT(_q_applicationDestroyed()), Qt::DirectConnection);
- signalsConnected = true;
- }
- }
-
- QThreadPool::start(runnable);
-}
-
-void QDnsLookupThreadPool::_q_applicationDestroyed()
-{
- waitForDone();
- signalsConnected = false;
-}
-
QT_END_NAMESPACE
#include "moc_qdnslookup.cpp"
diff --git a/src/network/kernel/qdnslookup_p.h b/src/network/kernel/qdnslookup_p.h
index 84deaa0fd68..b4a63ab0cea 100644
--- a/src/network/kernel/qdnslookup_p.h
+++ b/src/network/kernel/qdnslookup_p.h
@@ -181,22 +181,6 @@ private:
quint16 port;
};
-class QDnsLookupThreadPool : public QThreadPool
-{
- Q_OBJECT
-
-public:
- QDnsLookupThreadPool();
- void start(QRunnable *runnable);
-
-private slots:
- void _q_applicationDestroyed();
-
-private:
- QMutex signalsMutex;
- bool signalsConnected;
-};
-
class QDnsRecordPrivate : public QSharedData
{
public: