From a3d8512fe167d838c4f6afbdd41a59ef913937ce Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 22 Dec 2022 11:36:04 +0100 Subject: [PATCH] Don't create a QRunnable in QAndroidApplication::runOnAndroidMainThread() w/o timeout Creating a QRunnable is expensive business, incl. setting up QThreadPool::globalInstance() if it wasn't set up already, so don't do it for a no-op task. Somewhat mitigates, but doesn't fix, QTBUG-109586. Task-number: QTBUG-109586 Change-Id: If2043134414d68adc9188e5bb7650ca08046b4aa Reviewed-by: Qt CI Bot Reviewed-by: Assam Boudjelthia (cherry picked from commit 26ea6157e6429a6ba0794272df195c0bc591cda9) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/platform/android/qandroidnativeinterface.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/corelib/platform/android/qandroidnativeinterface.cpp b/src/corelib/platform/android/qandroidnativeinterface.cpp index a93844139ba..6fb6bceadf7 100644 --- a/src/corelib/platform/android/qandroidnativeinterface.cpp +++ b/src/corelib/platform/android/qandroidnativeinterface.cpp @@ -159,8 +159,8 @@ QFuture QNativeInterface::QAndroidApplication::runOnAndroidMainThread( QFuture future = promise->future(); promise->start(); - (void) QtConcurrent::run([=, &future]() { - if (!timeout.isForever()) { + if (!timeout.isForever()) { + (void) QtConcurrent::run([=, &future]() { QEventLoop loop; QTimer::singleShot(timeout.remainingTime(), &loop, [&]() { future.cancel(); @@ -177,8 +177,8 @@ QFuture QNativeInterface::QAndroidApplication::runOnAndroidMainThread( }); watcher.setFuture(future); loop.exec(); - } - }); + }); + } QMutexLocker locker(&g_pendingRunnablesMutex); g_pendingRunnables->push_back(std::pair(runnable, promise));