mirror of
https://github.com/sbt/sbt.git
synced 2026-08-28 17:13:56 +02:00
With usePipelining enabled, earlyOutputPing was completed only as a side effect of zinc reporting progress mid-compile (CompileProgress.afterEarlyOutput via writeEarlyOut / notifyNoEarlyOut in zinc-core). On an action-cache hit zinc never runs, and on a failed compile it never reports, so the promise stayed unfulfilled and every task waiting on it - compileEarly and makePickleProducts across downstream pipelined projects - parked forever. A warm compile;compile on a multi-module build hung indefinitely (#9486). The compile task now completes the ping on every resolution path. Zinc's own completion still wins when zinc ran (tryComplete is atomic, so it can never pre-empt it); a cache hit completes it from the pickle jar's presence on disk (absent jar means downstream falls back to a full compile, which is the correct degradation); a failed compile completes it false so waiters take the full compile path and propagate the failure instead of hanging. Generated-by: kimi-code/k3 (Oh My Pi)