In WebKit, ending a worker whose WebGPU device onnxruntime-web's JSPI build
still holds ends the page with it (found by the First letters work, 215f65a4;
seen here with Playwright's WebKit, 2026-10-02). On an iPad that is the end of
every listen: the listener lets go as listening ends (the models take turns),
as the sentence helper closes, after a failed run, and when it sits unused.
The worker now asks the adapter for a device of its own (every limit and
feature it offers) and hands it to the runtime for all three sessions.
Unloading closes any listening, releases the sessions and destroys the
device, which gives back all of its graphics memory; a load that fails
destroys it too. listen.js ends a worker only once it has answered that
unload (retire, used by dropWorker, through which every path that lets the
listener go passes); one that never answers is left rather than ended.
Its bytes changed, so the runtime directory is onnxruntime-web-1.30.0-aac4,
with the worker re-pinned in RUNTIME_FILES and the directory in vendor.sh.
The bundle and the WebAssembly are unchanged.
Checked in Playwright's WebKit with the app's own code loading three
sessions on WebGPU: closing the row (twice) and a failed run leave the page
alive; the same steps with the previous worker end the page.
Co-Authored-By: Claude Opus 5.5 <[email protected]>