summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
authorMorten Johan Sørvig <morten.sorvig@qt.io>2021-09-30 15:01:14 +0200
committerMorten Johan Sørvig <morten.sorvig@qt.io>2021-10-01 18:30:26 +0200
commit9875869d3174cf0f15ebfccac427ade3cb01e046 (patch)
tree2fcfaea075746b3ffb2d0daa61f897aed9357b01 /src/corelib/kernel
parent8652f4766b1afb31acc7f5678ca5786a8209b275 (diff)
wasm: fix runOnMainThread()
Calling emscripten_async_run_in_main_runtime_thread_() with a pointer to a static lambda was too clever, use an anonymous function as callback instead. Pick-to: 6.2 Task-number: QTBUG-94344 Change-Id: I2d8a8b0ffc2dd1d02018aa5902550216d00f641d Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r--src/corelib/kernel/qeventdispatcher_wasm.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/corelib/kernel/qeventdispatcher_wasm.cpp b/src/corelib/kernel/qeventdispatcher_wasm.cpp
index f5c2802aa6..c0d753c594 100644
--- a/src/corelib/kernel/qeventdispatcher_wasm.cpp
+++ b/src/corelib/kernel/qeventdispatcher_wasm.cpp
@@ -567,16 +567,20 @@ void QEventDispatcherWasm::callProcessTimers(void *context)
}
#if QT_CONFIG(thread)
-// Runs a function on the main thread
-void QEventDispatcherWasm::runOnMainThread(std::function<void(void)> fn)
-{
- static auto trampoline = [](void *context) {
+
+namespace {
+ void trampoline(void *context) {
std::function<void(void)> *fn = reinterpret_cast<std::function<void(void)> *>(context);
(*fn)();
delete fn;
- };
+ }
+}
+
+// Runs a function on the main thread
+void QEventDispatcherWasm::runOnMainThread(std::function<void(void)> fn)
+{
void *context = new std::function<void(void)>(fn);
- emscripten_async_run_in_main_runtime_thread_(EM_FUNC_SIG_VI, reinterpret_cast<void *>(&trampoline), context);
+ emscripten_async_run_in_main_runtime_thread_(EM_FUNC_SIG_VI, reinterpret_cast<void *>(trampoline), context);
}
#endif