diff options
| author | Even Oscar Andersen <even.oscar.andersen@qt.io> | 2025-07-17 11:41:41 +0200 |
|---|---|---|
| committer | Morten Sørvig <morten.sorvig@qt.io> | 2025-07-18 15:51:19 +0200 |
| commit | 3a217d2592602fb4bdef28d721871a161ecfb16f (patch) | |
| tree | 04871a1f6fc504b2465d8dd865cb98cfada9b60f /src | |
| parent | b3ccdda154c1f7e0b3dde99ac737a36d1d660b92 (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.cpp | 10 |
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; } |
