You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When a managed crash hits CoreCLR's fatal-error path on maccatalyst-arm64, logging the managed call stack can fault a second time inside the signal handler. The process then spins in PAL_DispatchException indefinitely instead of terminating. In CI this turns a crash into a hang that is only killed by the XHarness timeout (75 minutes), with no crash report and TEST_RESULTS_MISSING.
How it was found
The first fault was a real bug, fixed in #134699: an interpreted delegate shuffle thunk called CID_VirtualOpenDelegateDispatch through calli without x11 set, so CID_VirtualOpenDelegateDispatchWorker read a garbage delegate. This issue is about what happened after that fault.
Reproduced locally on maccatalyst-arm64 CoreCLR Release (macOS 26.6.2, Apple M5 Max) with System.Runtime.Tests at commit 9665c7d75e0, before the #134699 fix. CI occurrence: build 1613389, maccatalyst-arm64 Release AllSubsets_CoreCLR_Smoke, Helix job 5f296c2d-4f02-462f-ad48-7ae9c68579d8, work item System.Runtime.Tests ("Run timed out after 4500 seconds").
Stack (sample of the hung process, crashing thread)
Across the whole sample, this thread's hottest top-of-stack frames were TypeString::AppendMethodImpl (1332) and PAL_DispatchException (159).
Expected behavior
A fault while logging the fatal-error call stack should not prevent termination. The process should abort, possibly with a truncated stack log, so the harness reports a crash promptly.
Other information
It is not yet known which frame supplied the invalid MethodDesc. A likely candidate is the StubDispatchFrame pushed by CID_VirtualOpenDelegateDispatchWorker before it faulted.
Description
When a managed crash hits CoreCLR's fatal-error path on maccatalyst-arm64, logging the managed call stack can fault a second time inside the signal handler. The process then spins in
PAL_DispatchExceptionindefinitely instead of terminating. In CI this turns a crash into a hang that is only killed by the XHarness timeout (75 minutes), with no crash report andTEST_RESULTS_MISSING.How it was found
The first fault was a real bug, fixed in #134699: an interpreted delegate shuffle thunk called
CID_VirtualOpenDelegateDispatchthroughcalliwithoutx11set, soCID_VirtualOpenDelegateDispatchWorkerread a garbage delegate. This issue is about what happened after that fault.Reproduced locally on maccatalyst-arm64 CoreCLR Release (macOS 26.6.2, Apple M5 Max) with
System.Runtime.Testsat commit9665c7d75e0, before the #134699 fix. CI occurrence: build 1613389,maccatalyst-arm64 Release AllSubsets_CoreCLR_Smoke, Helix job5f296c2d-4f02-462f-ad48-7ae9c68579d8, work itemSystem.Runtime.Tests("Run timed out after 4500 seconds").Stack (
sampleof the hung process, crashing thread)Across the whole sample, this thread's hottest top-of-stack frames were
TypeString::AppendMethodImpl(1332) andPAL_DispatchException(159).Expected behavior
A fault while logging the fatal-error call stack should not prevent termination. The process should abort, possibly with a truncated stack log, so the harness reports a crash promptly.
Other information
MethodDesc. A likely candidate is theStubDispatchFramepushed byCID_VirtualOpenDelegateDispatchWorkerbefore it faulted.Note
This issue was generated with GitHub Copilot.