summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEven Oscar Andersen <even.oscar.andersen@qt.io>2025-07-17 11:41:41 +0200
committerMorten Sørvig <morten.sorvig@qt.io>2025-07-18 15:51:19 +0200
commit3a217d2592602fb4bdef28d721871a161ecfb16f (patch)
tree04871a1f6fc504b2465d8dd865cb98cfada9b60f /src
parentb3ccdda154c1f7e0b3dde99ac737a36d1d660b92 (diff)
wasm: Make suspendresumecontrol event handling reentrant
Read the pending event count at each iteration to make sure we don't process too few (or too many) events. Change-Id: I18e8b577184591c9dcc385e6fc7e3e8f9cab09ce Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/platform/wasm/qwasmsuspendresumecontrol.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/corelib/platform/wasm/qwasmsuspendresumecontrol.cpp b/src/corelib/platform/wasm/qwasmsuspendresumecontrol.cpp
index 9357db4ab8f..e03ca89f4ce 100644
--- a/src/corelib/platform/wasm/qwasmsuspendresumecontrol.cpp
+++ b/src/corelib/platform/wasm/qwasmsuspendresumecontrol.cpp
@@ -164,15 +164,17 @@ bool QWasmSuspendResumeControl::sendPendingEvents()
Q_ASSERT(emscripten_is_main_runtime_thread());
#endif
emscripten::val pendingEvents = suspendResumeControlJs()["pendingEvents"];
- int count = pendingEvents["length"].as<int>();
- if (count == 0)
- return false;
- while (count-- > 0) {
+ if (pendingEvents["length"].as<int>() == 0)
+ return 0;
+
+ int count = 0;
+ while (pendingEvents["length"].as<int>() > 0) { // Make sure it is reentrant
// Grab one event (handler and arg), and call it
emscripten::val event = pendingEvents.call<val>("shift");
auto it = m_eventHandlers.find(event["index"].as<int>());
Q_ASSERT(it != m_eventHandlers.end());
it->second(event["arg"]);
+ ++count;
}
return true;
}