From 1c8b4ac67b06063d2076f5df4fe435020ab3ccdb Mon Sep 17 00:00:00 2001 From: Mikolaj Boc Date: Fri, 18 Aug 2023 16:35:10 +0200 Subject: [PATCH] Fix problem with queued signals on main thread MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Queued signals from main thread were not handled if enqueued on a different thread. This is because qt_jspi_can_resume_js was called on a thread (worker), where the Module object does not have the property used for determining whether JSPI is suspended. Change-Id: Icbc4dbfcf46c1091eb71b23c7de50760c8a339ae Reviewed-by: Qt CI Bot Reviewed-by: Morten Johan Sørvig --- src/corelib/kernel/qeventdispatcher_wasm.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/corelib/kernel/qeventdispatcher_wasm.cpp b/src/corelib/kernel/qeventdispatcher_wasm.cpp index 0bf08eb8e5..fd618580f5 100644 --- a/src/corelib/kernel/qeventdispatcher_wasm.cpp +++ b/src/corelib/kernel/qeventdispatcher_wasm.cpp @@ -531,9 +531,15 @@ bool QEventDispatcherWasm::wakeEventDispatcherThread() #endif Q_ASSERT(isMainThreadEventDispatcher()); if (useJspi()) { - if (!qt_jspi_can_resume_js()) - return false; - runOnMainThread([]() { qt_jspi_resume_js(); }); + +#if QT_CONFIG(thread) + return qstdweb::runTaskOnMainThread( + []() { return qt_jspi_can_resume_js() && qt_jspi_resume_js(); }, &g_proxyingQueue); +#else + return qstdweb::runTaskOnMainThread( + []() { return qt_jspi_can_resume_js() && qt_jspi_resume_js(); }); +#endif + } else { if (!g_is_asyncify_suspended) return false;