next.js
b1db0269 - fix(turbopack): unref ThreadsafeFunctions to allow Node.js exit after build (#91107)

Commit
6 days ago
fix(turbopack): unref ThreadsafeFunctions to allow Node.js exit after build (#91107) ## What? Calls `unref()` on the `ThreadsafeFunction`s created in `NapiNextTurbopackCallbacks::from_js` (`throw_turbopack_internal_error` and `on_before_deferred_entries`). ## Why? These `ThreadsafeFunction`s are not unref'd, which means they keep the Node.js event loop alive even after `project_shutdown` completes. Currently this doesn't cause a visible hang in Next.js because turbopack runs inside a worker thread (via `packages/next/src/lib/worker.ts`), and the worker thread is terminated externally. However, if turbopack were ever run in a child process or directly in the main process, the build would hang indefinitely after completion — the Rust side of `stop_and_wait()` finishes, but the Node.js process never exits because the ref'd `ThreadsafeFunction`s prevent the event loop from draining. This happened in `utoo`, caused some CI hang forever, the same fix commit: https://github.com/utooland/utoo/pull/2670/changes/9e8fd08e84470dce6ac59e976db1b556ce7fece8. This fix makes the shutdown behavior more robust by following the same pattern already used in `register_worker_scheduler` in `turbopack-node/src/worker_pool/worker_thread.rs`, where both creator and terminator `ThreadsafeFunction`s are explicitly unref'd. ## How? - Added `Env` parameter to `NapiNextTurbopackCallbacks::from_js()` - Called `unref(&env)` on both `throw_turbopack_internal_error` and `on_before_deferred_entries` after creation - Updated the call site in `project_new` to pass `&env`
Author
Parents
Loading