diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-01-12 17:43:40 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-01-13 13:44:34 +0000 |
commit | 1421694d17d464be59478d573a7873f86b6fd2a2 (patch) | |
tree | f5df4005c755636fb7ebd01accb00859e4f78492 | |
parent | 009c91aeecec632eb580d37c39db405f80d388bb (diff) | |
download | qt-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.h | 5 |
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) |