Repository navigation
Conversation
Emscripten 6.0 removes PThread.runningWorkers and no longer sets a per-worker `loaded` flag, which dtest's Node clean-exit hook reads. Both reads are guarded, so the hook degrades to a bounded retry before terminateAllThreads; the existing high-thread-count system test stays clean (and the race did not reproduce locally on 5.0.7 or 6.0.12 even with the wait disabled), so only its comment changes here. The generated isFileURI line is unchanged, so patch_web_wasm.py only needs its version note bumped. The pre-built cache still has no LTO system libraries, so the no-link-time-LTO note stands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Emscripten 6.0.2 dropped wasmBinary from the default list of Module
properties the generated JS reads. createDdsModule({wasmBinary}) then
aborted in assertion builds (dds_web_wasm_system_test, and the e2e test
waiting on the solver) and would silently ignore the embedded bytes in
release builds. List exactly the property our two callers pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Fixed both CI failures (one cause) in the latest commit. Emscripten 6.0.2 dropped
Why my earlier local run missed it: both tests skip when
|
There was a problem hiding this comment.
🔵 Needs a closer look
The major toolchain upgrade changes pthread internals, and cross-platform runtime compatibility still needs human confirmation.
No open issues 🎉
What changed in this PR
Upgrades DDS’s WebAssembly toolchain from emsdk 5.0.7 to 6.0.12.
Changes:
- Updates the toolchain pin, archive metadata, and lockfile.
- Explicitly enables
wasmBinaryinput for web module initialization. - Refreshes compatibility comments and build documentation.
| File | Description |
|---|---|
| web/patch_web_wasm.py | Updates expected SDK version and compatibility comment. |
| web/BUILD.bazel | Enables wasmBinary initialization input. |
| specs/wasm-emscripten.md | Refreshes toolchain and LTO notes. |
| MODULE.bazel.lock | Updates SDK artifacts and extension metadata. |
| MODULE.bazel | Pins emsdk 6.0.12 and its archive. |
| library/tests/dtest.cpp | Documents shutdown behavior under Emscripten 6; no logic changes. |
| docs/wasm_build.md | Updates version and build guidance. |
Review effort: Balanced
tameware
left a comment
There was a problem hiding this comment.
LGTM.
I ran the front-end on my Mac. It worked, and the e2e tests pass.
Bumps the WASM toolchain from
emsdk5.0.7 to 6.0.12 (Emscripten 6.0.x). Thearchive_override's checksum, folder prefix and URLs come from the BCRsource.jsonfor 6.0.12. emsdk's own dependencies are unchanged between the two versions, so nothing else in the dependency graph moves.Emscripten 6.0 changes checked
PThread.runningWorkersremoved:library/tests/dtest.cpp's Node clean-exit hook reads it, and also a per-workerloadedflag that 6.0 no longer sets either. Both reads are guarded (|| [],!w.loaded), so the hook degrades to a bounded retry (up to 100 event-loop turns) beforeterminateAllThreads.test_dtest_wasm_calc_high_thread_count_no_terminated_workersstill passes.-n 16printed no "terminated worker" warning, on 6.0.12 and on 5.0.7 alike. With no failing case to drive a change, only the comment is updated. If the race shows up again, a fix needs a failing test first.isFileURIline: Emscripten 6 emits the same line as 5.x, soweb/patch_web_wasm.pystill matches it (verified withweb/update_wasm.sh). Only its version note changes.docs/wasm_build.mdandspecs/wasm-emscripten.mdstands; only its version reference changes..exelaunchers instead of.bat: handled inside the emsdk Bazel rules, and the Windowswasm_webjob covers it.FAKE_DYLIBS/-shareddefault change andpause()returning 0: not used.Verification (macOS, local)
bazelisk test //...: 105/105 pass.bazelisk test //web:dds_web_e2e_test --test_tag_filters=: passes.web/update_wasm.sh: builds, patches and verifies the web bundle.🤖 Generated with Claude Code