summaryrefslogtreecommitdiffstats
path: root/src/network/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/kernel')
-rw-r--r--src/network/kernel/qhostinfo.cpp9
-rw-r--r--src/network/kernel/qhostinfo_p.h6
2 files changed, 8 insertions, 7 deletions
diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp
index a5e50ff21b..483ab875c6 100644
--- a/src/network/kernel/qhostinfo.cpp
+++ b/src/network/kernel/qhostinfo.cpp
@@ -944,10 +944,9 @@ void QHostInfoLookupManager::clear()
cache.clear();
}
-void QHostInfoLookupManager::work()
+// assumes mutex is locked by caller
+void QHostInfoLookupManager::rescheduleWithMutexHeld()
{
- QMutexLocker locker(&mutex);
-
if (wasDeleted)
return;
@@ -1012,7 +1011,7 @@ void QHostInfoLookupManager::scheduleLookup(QHostInfoRunnable *r)
return;
scheduledLookups.enqueue(r);
- work();
+ rescheduleWithMutexHeld();
}
// called by QHostInfo
@@ -1068,7 +1067,7 @@ void QHostInfoLookupManager::lookupFinished(QHostInfoRunnable *r)
currentLookups.removeOne(r);
#endif
finishedLookups.append(r);
- work();
+ rescheduleWithMutexHeld();
}
// This function returns immediately when we had a result in the cache, else it will later emit a signal
diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h
index 0433d1d17b..f5b630346c 100644
--- a/src/network/kernel/qhostinfo_p.h
+++ b/src/network/kernel/qhostinfo_p.h
@@ -232,7 +232,6 @@ public:
~QHostInfoLookupManager();
void clear() override;
- void work();
// called from QHostInfo
void scheduleLookup(QHostInfoRunnable *r);
@@ -255,10 +254,13 @@ protected:
#if QT_CONFIG(thread)
QThreadPool threadPool;
#endif
- QRecursiveMutex mutex;
+ QMutex mutex;
bool wasDeleted;
+private:
+ void rescheduleWithMutexHeld();
+
private slots:
#if QT_CONFIG(thread)
void waitForThreadPoolDone() { threadPool.waitForDone(); }