ReviewOS

zig-utils/zig-js

CI: remove wall-clock races from mid-GC finalization fuzz cases

#328
Closed chris opened this 10 days ago ·
10 days ago

Tracked by: #134 Related: #326

Evidence

CI run 29702521425 reached 34 successful jobs, then threadfuzz-midgc reported two helper-wait timeouts:

  • seed 4: finalization asyncJoin waiter result timed-out
  • seed 7: waitAsync/finalization gate result timed-out

Both focused repros pass locally on eed1a550:

zig build threadfuzz-bin
zig-out/bin/threadfuzz midgcfinalasync 1 4
zig-out/bin/threadfuzz midgcwaitasyncfinal 1 7

The two cases use randomized 1.2–2.3 second helper waits even though the main thread deliberately performs allocation pressure and a parallel collection. The same waits already receive 12 seconds under TSan, and the aggregate mid-GC runner has a 300-second seed watchdog for genuine hangs.

Acceptance

  • Mid-GC variants use a load-tolerant helper-wait budget without changing the shorter non-mid-GC lifecycle profile.
  • Focused seeds 4 and 7 pass.
  • The descendant full threadfuzz-midgc 20-seed / 900-program job passes.
  • No semantic result, collection-attempt, collection-completion, finalization, or cleanup oracle is removed.
10 days ago

Implemented in 32c547bf.

The two mid-GC variants now use the existing 12-second TSan helper-wait budget, while ordinary non-mid-GC lifecycle cases retain their randomized short timeout. No result, collection, finalization, or cleanup oracle changed; the 300-second outer seed watchdog remains the genuine hang detector.

Focused replay after the change:

  • midgcfinalasync 1 4: 0 failures
  • midgcwaitasyncfinal 1 7: 0 failures

Full descendant CI: https://github.com/zig-utils/zig-js/actions/runs/29703497726

Keeping this open for the required 20-seed / 900-program acceptance leg.

10 days ago

Accepted by descendant CI run 29703497726: 39 jobs passed, with only the intentional nightly skip. Both formerly racing mid-GC cases and every TSan/fuzz shard completed successfully.

Sign in to comment on this issue.