summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2022-01-12 17:43:40 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2022-01-13 13:44:34 +0000
commit1421694d17d464be59478d573a7873f86b6fd2a2 (patch)
treef5df4005c755636fb7ebd01accb00859e4f78492
parent009c91aeecec632eb580d37c39db405f80d388bb (diff)
downloadqt-creator-1421694d17d464be59478d573a7873f86b6fd2a2.tar.gz
Avoid starting threads from the wrong hosting thread
This should be safe for QThreadPool, but we are still fixing an underlying bug, QTBUG-99775, and Qt Creator may just want to avoid the issue altogether. Change-Id: I50041cc6f5974d234b1a07be5cb19108fba897c7 Reviewed-by: Marc Mutz <marc.mutz@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--src/libs/utils/runextensions.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/libs/utils/runextensions.h b/src/libs/utils/runextensions.h
index e7b9dd6c93..9339f1a52e 100644
--- a/src/libs/utils/runextensions.h
+++ b/src/libs/utils/runextensions.h
@@ -408,7 +408,10 @@ QFuture<ResultType> runAsync_internal(QThreadPool *pool,
QFuture<ResultType> future = job->future();
if (pool) {
job->setThreadPool(pool);
- pool->start(job);
+ if (QThread::currentThread() == pool->thread())
+ pool->start(job);
+ else
+ QMetaObject::invokeMethod(pool, [pool, job]() { pool->start(job); }, Qt::QueuedConnection);
} else {
auto thread = new Internal::RunnableThread(job);
if (stackSize)