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",
        "System.Threading.Channels.ChannelUtilities.Remove[WaitingReadAsyncOperation]",
        "get_CancellationCallbackDelegate"
    ],
    "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
1478944 dotnet/runtime System.Diagnostics.Process.Tests.WorkItemExecution #129713

Summary

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions