wasm: call onExit once and only once on exit

We listen to the onExit and on onAbort Emscripten events,
and also handle exit by exception. Make sure we call
onExit only once on exit, regardless of the order and
number of Emscripten events.

Change-Id: I4833a1056fad0a2706bd6c0f0fce98fb052fe8c8
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
(cherry picked from commit ac4619a36a54a2168ea5d7a2c7d059781564098c)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Morten Sørvig 2023-10-25 12:14:36 +02:00 committed by Qt Cherry-pick Bot
parent ab6af9cba9
commit 8e82b16587

View File

@ -162,25 +162,32 @@ async function qtLoad(config)
return originalLocatedFilename;
}
let onExitCalled = false;
const originalOnExit = config.onExit;
config.onExit = code => {
originalOnExit?.();
if (!onExitCalled) {
onExitCalled = true;
config.qt.onExit?.({
code,
crashed: false
});
}
}
const originalOnAbort = config.onAbort;
config.onAbort = text =>
{
originalOnAbort?.();
aborted = true;
if (!onExitCalled) {
onExitCalled = true;
config.qt.onExit?.({
text,
crashed: true
});
}
};
const fetchPreloadFiles = async () => {
@ -206,10 +213,13 @@ async function qtLoad(config)
instance = await Promise.race(
[circuitBreaker, config.qt.entryFunction(config)]);
} catch (e) {
if (!onExitCalled) {
onExitCalled = true;
config.qt.onExit?.({
text: e.message,
crashed: true
});
}
throw e;
}