Skip to content

AF: op.Next is null == op.Previous is null in ChannelUtilities.Remove (RendezvousChannel cancellation) #129796

Description

@pavelsavara

Build Information

Build: https://dev.azure.com/dnceng-public/public/_build/results?buildId=1478944
Leg Name: System.Diagnostics.Process.Tests — Mono libraries test run, azurelinux.3.arm64.open (queue azurelinux.3.arm64.open)

Observed on PR #129713 merge run (Helix work item System.Diagnostics.Process.Tests, job 9c28ca4d-566f-4099-9e96-a37d4e9ab27a). The failure is not related to that PR's changes (a native Mono exception-handling change) — it is a managed concurrency assert in System.Threading.Channels.

Error Details

A managed Debug.Assert fires in ChannelUtilities.Remove from the RendezvousChannel<ProcessOutputLine> cancellation callback running on a thread-pool worker, then FailFast aborts the process (SIGABRT, exit code 134). The RendezvousChannel waiter list (WaitingReadAsyncOperation) is left with an inconsistent Next/Previous state — a race between the cancellation callback's Remove and the read/complete path.

Process terminated. Assertion failed.
op.Next is null == op.Previous is null
   at System.Diagnostics.DebugProvider.Fail(String message, String detailMessage) in /_/src/libraries/System.Private.CoreLib/src/System/Diagnostics/DebugProvider.cs:line 22
   at System.Diagnostics.Debug.Fail(String message, String detailMessage) in /_/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Debug.cs:line 135
   at System.Diagnostics.Debug.Assert(Boolean condition, String message, String detailMessage) in /_/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Debug.cs:line 99
   at System.Diagnostics.Debug.Assert(Boolean condition, String message) in /_/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Debug.cs:line 88
   at System.Threading.Channels.ChannelUtilities.Remove[WaitingReadAsyncOperation](WaitingReadAsyncOperation& head, WaitingReadAsyncOperation op) in /_/src/libraries/System.Threading.Channels/src/System/Threading/Channels/ChannelUtilities.cs:line 152
   at System.Threading.Channels.RendezvousChannel`1.<>c[[System.Diagnostics.ProcessOutputLine, System.Diagnostics.Process, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]].<get_CancellationCallbackDelegate>b__16_1(KeyValuePair`2 state) in /_/src/libraries/System.Threading.Channels/src/System/Threading/Channels/RendezvousChannel.cs:line 470
   at System.Threading.QueueUserWorkItemCallbackDefaultContext`1[...].Execute() in /_/src/libraries/System.Private.CoreLib/src/System/Threading/ThreadPoolWorkQueue.cs:line 1361
   at System.Threading.ThreadPoolWorkQueue.Dispatch() in /_/src/libraries/System.Private.CoreLib/src/System/Threading/ThreadPoolWorkQueue.cs:line 960
   at System.Threading.PortableThreadPool.WorkerThread.WorkerDoWork(PortableThreadPool threadPoolInstance) in /_/src/libraries/System.Private.CoreLib/src/System/Threading/PortableThreadPool.WorkerThread.cs:line 137
   at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart() in /_/src/libraries/System.Private.CoreLib/src/System/Threading/PortableThreadPool.WorkerThread.cs:line 110
   at System.Threading.Thread.StartCallback() in /_/src/mono/System.Private.CoreLib/src/System/Threading/Thread.Mono.cs:line 218

Likely a sibling of the closed Known Build Error #127234 ("AF: The continuation was the completion sentinel.") in the same RendezvousChannel / System.Diagnostics.Process.Tests area, but a distinct assert and code path (ChannelUtilities.Remove via the cancellation callback, vs FailOperations/TryComplete in #127234). The RendezvousChannel<ProcessOutputLine> code is recent (#116097, #126987, #127106).

Error Message

{
    "ErrorMessage": "op.Next is null == op.Previous is null",
    "BuildRetry": false,
    "ExcludeConsoleLog": false
}

Note

This issue was created with the assistance of GitHub Copilot.

Known issue validation

Build: 🔎 https://dev.azure.com/dnceng-public/public/_build/results?buildId=1478944
Error message validated: [op.Next is null == op.Previous is null System.Threading.Channels.ChannelUtilities.Remove[WaitingReadAsyncOperation] get_CancellationCallbackDelegate]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 6/24/2026 12:05:20 PM UTC

Report

Build Repository Test Pull Request
1485582 dotnet/runtime System.Diagnostics.Process.Tests.WorkItemExecution #128862
1478944 dotnet/runtime System.Diagnostics.Process.Tests.WorkItemExecution #129713

Summary

24-Hour Hit Count 7-Day Hit Count 1-Month Count
1 2 2

Known issue validation

Build: 🔎 https://dev.azure.com/dnceng-public/public/_build/results?buildId=1478944
Error message validated: [op.Next is null == op.Previous is null]
Result validation: ✅ Known issue matched with the provided build.
Validation performed at: 6/29/2026 8:07:19 PM UTC

Report

Build Repository Test Pull Request
1485582 dotnet/runtime System.Diagnostics.Process.Tests.WorkItemExecution #128862
1478944 dotnet/runtime System.Diagnostics.Process.Tests.WorkItemExecution #129713

Summary

24-Hour Hit Count 7-Day Hit Count 1-Month Count
1 2 2

Report

Build Repository Test Pull Request
1551179 dotnet/runtime System.Diagnostics.Process.Tests.WorkItemExecution #131062
1551088 dotnet/runtime System.Diagnostics.Process.Tests.WorkItemExecution #132250
1537158 dotnet/runtime System.Diagnostics.Process.Tests.WorkItemExecution #131732
1522952 dotnet/runtime System.Diagnostics.Process.Tests.WorkItemExecution #129734

Summary

24-Hour Hit Count 7-Day Hit Count 1-Month Count
0 0 4

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions