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. Pick-to: 6.7 Change-Id: I4833a1056fad0a2706bd6c0f0fce98fb052fe8c8 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
This commit is contained in:
parent
f413229184
commit
ac4619a36a
@ -169,25 +169,32 @@ async function qtLoad(config)
|
||||
return originalLocatedFilename;
|
||||
}
|
||||
|
||||
let onExitCalled = false;
|
||||
const originalOnExit = config.onExit;
|
||||
config.onExit = code => {
|
||||
originalOnExit?.();
|
||||
config.qt.onExit?.({
|
||||
code,
|
||||
crashed: false
|
||||
});
|
||||
|
||||
if (!onExitCalled) {
|
||||
onExitCalled = true;
|
||||
config.qt.onExit?.({
|
||||
code,
|
||||
crashed: false
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const originalOnAbort = config.onAbort;
|
||||
config.onAbort = text =>
|
||||
{
|
||||
originalOnAbort?.();
|
||||
|
||||
aborted = true;
|
||||
config.qt.onExit?.({
|
||||
text,
|
||||
crashed: true
|
||||
});
|
||||
|
||||
if (!onExitCalled) {
|
||||
onExitCalled = true;
|
||||
config.qt.onExit?.({
|
||||
text,
|
||||
crashed: true
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const fetchPreloadFiles = async () => {
|
||||
@ -213,10 +220,13 @@ async function qtLoad(config)
|
||||
instance = await Promise.race(
|
||||
[circuitBreaker, config.qt.entryFunction(config)]);
|
||||
} catch (e) {
|
||||
config.qt.onExit?.({
|
||||
text: e.message,
|
||||
crashed: true
|
||||
});
|
||||
if (!onExitCalled) {
|
||||
onExitCalled = true;
|
||||
config.qt.onExit?.({
|
||||
text: e.message,
|
||||
crashed: true
|
||||
});
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user