Skip to content

diag: trace parked-worker immediate GC wake on Windows ARM64 (do not merge) - #202

Closed
steipete wants to merge 2 commits into
mainfrom
claude/diag-parked-worker-gc-s8
Closed

steipete wants to merge 2 commits into
mainfrom
claude/diag-parked-worker-gc-s8

Conversation

@steipete

@steipete steipete commented Oct 25, 2026 •

Copy link
Copy Markdown

Diagnostic investigation only. No runtime fix is proposed; this branch must not merge.

The unchanged parked-worker immediate-GC test regresses on the original signed Windows ARM64 binaries from merge 6aba42d75d: ten interleaved trials timed out, while all ten trials of the prior qualified 807211511f binary passed. Both original Windows x64 binaries passed. The feature and test originated in #129.

The initial formatted traces masked the failure. Lower-impact mapped traces preserve it: Windows ARM64 times out in all ten trials with tracing disabled, all ten with memory recording, and all ten with background-only recording. Windows x64 passes all thirty trials. The ARM64 full worker file has 292 passes and the single immediate-GC failure; x64 passes all 293.

All eleven recorded failing ARM64 cases show the collector publishing the immediate timer, the VM wake, libuv delivery, owner-side timer consumption/firing, and GC completion. No deferred finalizer is enqueued. The matching x64 recordings enqueue and run the finalizer. Source ordering places weak-reference reconciliation before the recorded GC-end observer. Thus the observed failure precedes Bun's deferred task dispatch; no lost owner wake was demonstrated.

The final native diagnostic captures full-memory dumps of both failing original ARM64 executables (normal and profile). Native CDB with the profile PDB shows the worker parked in WebWorker::spin → auto_tick_active → uv_run → GetQueuedCompletionStatusEx. Both prior-qualified executable variants pass. The exact breaking upstream commit and reason the finalizer is not readied remain unproven. No object-retention root cause or runtime correction is claimed.

Evidence:

All six diagnostic iterations are used. The original regression test, timeout, and assertions remain unchanged. Diagnostic changes passed independent Codex P2 scoped review. Release qualification remains blocked on this regression; no merge, release, or settings change is part of this investigation.

@steipete steipete closed this Oct 25, 2026
@steipete
steipete deleted the claude/diag-parked-worker-gc-s8 branch October 25, 2026 05:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant