next.js
549476b0 - turbo-tasks-backend: fix strongly consistent read hanging on a canceled task (#98312)

Commit
44 days ago
turbo-tasks-backend: fix strongly consistent read hanging on a canceled task (#98312) ### What Fixes a shutdown hang in `next build`: a strongly consistent read could wait forever on a task that shutdown had canceled, which in turn blocked `stop_and_wait` and hung the build until the test timeout. Also makes the `hanging_detection` feature usable — it panics due to a `data` access check today. ### Why the read hangs 1. Shutdown sets `stopped`. A task dispatched after that point is canceled before it runs, so it has no output. 2. Its parent completes and connects its children. `process_new_children` uses `!child.has_output()` as the test for "not computed yet" and marks such a child `InitialDirty` so it gets scheduled. 3. `make_task_dirty` promotes the canceled task's `SessionDependent` to plain `Dirty` and clears `current_session_clean`. That is correct for a live task that must re-run, and wrong for one that never will. 4. `AggregatedDataUpdate::from_task` then snapshots `dirty_state() == (true, false)` and contributes a dirty container that is not session-clean. 5. The parent is itself clean, so its own `update_dirty_state(None -> None)` early-returns and never evaluates `all_clean_event`. Its dirty-container count never drains. 6. The strongly consistent reader waits on that event forever, holding a foreground job that `stop_and_wait` blocks on. `has_output()` is a proxy for "needs computing", and a canceled task breaks that assumption. ### The fix Record a terminal error output when a task execution is canceled. Make hanging_detection more reliable
Author
Parents
Loading