Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DRAFT] Add Keep-Alive Ping and Timeout implementation #105672

Closed
wants to merge 23 commits into from

Conversation

CarnaViire
Copy link
Member

@CarnaViire CarnaViire commented Jul 30, 2024

Description TBA
ClientWebSocket tests TBA


[UPD 7/30] Existing WebSocket microbenchmarks (keep-alive disabled):


BenchmarkDotNet v0.13.13-nightly.20240311.145, Windows 11 (10.0.22621.3880/22H2/2022Update/SunValley2)
Intel Core i7-9750H CPU 2.60GHz, 1 CPU, 12 logical and 6 physical cores
.NET SDK 9.0.100-preview.7.24362.28
  [Host]     : .NET 9.0.0 (9.0.24.35702), X64 RyuJIT AVX2
  Job-FEBYIX : .NET 9.0.0 (42.42.42.42424), X64 RyuJIT AVX2
  Job-BQXXKD : .NET 9.0.0 (42.42.42.42424), X64 RyuJIT AVX2

PowerPlanMode=00000000-0000-0000-0000-000000000000  IterationTime=250ms  MaxIterationCount=20
MinIterationCount=15  WarmupCount=1

Method Job Toolchain Mean Error StdDev Median Min Max Ratio RatioSD Allocated Alloc Ratio
SendReceive Job-FEBYIX \main\corerun.exe 28.57 μs 2.469 μs 2.425 μs 28.59 μs 25.21 μs 33.34 μs 1.01 0.12 - NA
SendReceive Job-BQXXKD \pr\corerun.exe 26.57 μs 2.641 μs 3.042 μs 26.44 μs 21.02 μs 32.71 μs 0.94 0.13 - NA
ReceiveSend Job-FEBYIX \main\corerun.exe 65.05 μs 4.814 μs 5.544 μs 66.19 μs 49.78 μs 74.48 μs 1.01 0.13 626 B 1.00
ReceiveSend Job-BQXXKD \pr\corerun.exe 59.02 μs 6.766 μs 7.792 μs 59.52 μs 42.93 μs 73.10 μs 0.91 0.15 620 B 0.99

Copy link

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

Copy link

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

Copy link
Contributor

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

@CarnaViire
Copy link
Member Author

/azp run runtime-libraries-coreclr outerloop

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@CarnaViire
Copy link
Member Author

/azp run runtime-libraries-coreclr outerloop

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@CarnaViire
Copy link
Member Author

CarnaViire commented Aug 1, 2024

For history:

The weird hang happened (flaky) on linux mono minijit or interpreter with Debug libraries

test: we cancel CloseAsync and expect the cancellation to abort the websocket (so it will surface in awaiting the read task)

Task receiveTask = cws.ReceiveAsync(new byte[1], testTimeoutCts.Token);

var cancelCloseCts = new CancellationTokenSource();
await Assert.ThrowsAnyAsync<OperationCanceledException>(async () =>
{
    Task t = cws.CloseAsync(WebSocketCloseStatus.NormalClosure, null, cancelCloseCts.Token);
    cancelCloseCts.Cancel();
    await t;
});

await Assert.ThrowsAnyAsync<OperationCanceledException>(() => receiveTask);

code in question (simplified):

        private async Task CloseAsyncPrivate(...)
        {
            Log.CloseAsyncPrivateStarted();
            try
            {
                //...
                await SendCloseFrameAsync(...);

                //...
                Log("Waiting for a close frame");

                    //...
                    CancellationTokenRegistration registration = default;
                    try
                    {
                        if (cancellationToken.CanBeCanceled)
                        {
                            Log("Registering for cancellation");
                            registration = cancellationToken.Register(static s =>
                            {
                                Log("Aborting due to cancellation");
                                ((ManagedWebSocket)s!).Abort();
                            }, this);
                        }

                        //...
                        Log("Waiting for the _receiveMutex...");
                        await _receiveMutex.EnterAsync(cancellationToken); // this one ends up throwing TCE

                        // ...
                    }
                    finally
                    {
                        // ...
                        Log("Disposing cancellation registration");
                        registration.Dispose();
                        Log("Cancellation registration disposed");
                    }
                }

                //...
            }
            catch (Exception exc)
            {
                Log.Exception(exc);
                throw;
            }
            finally
            {
                Log.CloseAsyncPrivateCompleted();
            }
        }

logs:

13:31:51 /1/6/ - [CloseStart]
13:31:51 /1/6/ - SendCloseFrameAsync
13:31:51 /1/6/1/ -- [SendStart] opcode: Close, bufferLength: 2
13:31:51 /1/6/1/ -- [MutexEnter]
13:31:51 /1/6/1/ -- [MutexExit]
13:31:51 /1/6/1/ -- [SendStop]
13:31:51 /1/6/ - State transition from Open to CloseSent
13:31:51 /1/6/ - Waiting for a close frame
13:31:51 /1/6/ - Registering for cancellation
13:31:51 /1/6/ - Waiting for the _receiveMutex...
13:31:51 /1/6/ - [MutexContended] queueLength: 1
13:31:51 /1/6/ - Disposing cancellation registration
13:31:51 /1/6/ - Cancellation registration disposed
13:31:51 /1/6/ - System.Threading.Tasks.TaskCanceledException: A task was canceled.
   at System.Net.WebSockets.ManagedWebSocket.CloseAsyncPrivate(WebSocketCloseStatus closeStatus, String statusDescription, CancellationToken cancellationToken) in /_/src/libraries/System.Net.WebSockets/src/System/Net/WebSockets/ManagedWebSocket.cs:line 1522
13:31:51 /1/6/ - [CloseStop]
13:32:21 /1/5/ - Abort

Note: 13:31:51 is when TCE happens, but Abort only starts at 13:32:21
We never get "Aborting due to cancellation" log, even though we get and log the TaskCanceledException... and we see the registration being disposed (after we already got the exception...) but the registered callback didn't fire, so it didn't abort the WebSocket (which led to the test hanging and then full-test timeout firing (and finally aborting, 30s later)

Full trace
===== System.Net.WebSockets.Client.Tests.CloseTestDbg =====

CloseTestDbg 51.532 13:31:51.5328996 /  [Associate] thisOrContextObject: ManagedWebSocket#433292681, memberName: .ctor, first: ManagedWebSocket#433292681, second: RawConnectionStream#1299270382
CloseTestDbg 51.532 13:31:51.5329423 /  [Associate] thisOrContextObject: ManagedWebSocket#433292681, memberName: .ctor, first: ManagedWebSocket#433292681, second: AsyncMutex#102518422
CloseTestDbg 51.532 13:31:51.5329898 /  [Associate] thisOrContextObject: ManagedWebSocket#433292681, memberName: .ctor, first: ManagedWebSocket#433292681, second: AsyncMutex#2130326874
CloseTestDbg 51.533 13:31:51.5330150 /  [WsTrace] objName: ManagedWebSocket#433292681, memberName: .ctor, message: Enabling Keep-Alive Unsolicited Pong strategy: heartbeat=30000ms
CloseTestDbg 51.533 Underlying WebSocket: ManagedWebSocket#433292681
CloseTestDbg 51.533 13:31:51.5332321 /1/5/ - [ReceiveStart] objName: ManagedWebSocket#433292681, memberName: ReceiveAsyncPrivate, bufferLength: 1
CloseTestDbg 51.533 13:31:51.5332603 /1/5/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: ReceiveAsyncPrivate, message: shouldEnterMutex=True, shouldAbortOnCanceled=True
CloseTestDbg 51.533 13:31:51.5332784 /1/5/ - [MutexEnter] objName: AsyncMutex#2130326874, memberName: ReceiveAsyncPrivate
CloseTestDbg 51.533 13:31:51.5332947 /1/5/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: ReceiveAsyncPrivate, message: Reading the next frame header
CloseTestDbg 51.533 13:31:51.5333431 /1/6/ - [CloseStart] objName: ManagedWebSocket#433292681, memberName: CloseAsyncPrivate
CloseTestDbg 51.533 13:31:51.5333610 /1/6/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: SendCloseFrameAsync, message: SendCloseFrameAsync
CloseTestDbg 51.533 13:31:51.5333880 /1/6/1/ -- [SendStart] objName: ManagedWebSocket#433292681, memberName: SendFrameAsync, opcode: Close, bufferLength: 2
CloseTestDbg 51.533 13:31:51.5334096 /1/6/1/ -- [MutexEnter] objName: AsyncMutex#102518422, memberName: SendFrameFallbackAsync
CloseTestDbg 51.533 13:31:51.5334967 /1/6/1/ -- [MutexExit] objName: AsyncMutex#102518422, memberName: SendFrameFallbackAsync
CloseTestDbg 51.533 13:31:51.5335667 /1/6/1/ -- [SendStop] objName: ManagedWebSocket#433292681, memberName: SendFrameFallbackAsync
CloseTestDbg 51.533 13:31:51.5335879 /1/6/ - [WsAsyncDbg] objName: ManagedWebSocket#433292681, memberName: SendCloseFrameAsync, message: State update lock taken
CloseTestDbg 51.533 13:31:51.5336132 /1/6/ - [Info] thisOrContextObject: ManagedWebSocket#433292681, memberName: SendCloseFrameAsync, message: State transition from Open to CloseSent
CloseTestDbg 51.533 13:31:51.5336291 /1/6/ - [WsAsyncDbg] objName: ManagedWebSocket#433292681, memberName: SendCloseFrameAsync, message: State update lock released
CloseTestDbg 51.533 13:31:51.5336482 /1/6/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: CloseAsyncPrivate, message: Waiting for a close frame
CloseTestDbg 51.533 13:31:51.5336677 /1/6/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: CloseAsyncPrivate, message: Registering for cancellation
CloseTestDbg 51.533 13:31:51.5336841 /1/6/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: CloseAsyncPrivate, message: Waiting for the _receiveMutex...
CloseTestDbg 51.533 13:31:51.5337002 /1/6/ - [MutexContended] objName: AsyncMutex#2130326874, memberName: EnterAsync, queueLength: 1
CloseTestDbg 51.533 13:31:51.5337243 /1/6/ - [WsAsyncDbg] objName: AsyncMutex#2130326874, memberName: EnterAsync, message: State update lock taken
CloseTestDbg 51.533 13:31:51.5337432 /1/6/ - [WsAsyncDbg] objName: AsyncMutex#2130326874, memberName: EnterAsync, message: State update lock released
CloseTestDbg 51.533 13:31:51.5337665 /  [WsAsyncDbg] objName: AsyncMutex#2130326874, memberName: EnterAsync, message: State update lock taken
CloseTestDbg 51.533 13:31:51.5337822 /  [WsAsyncDbg] objName: AsyncMutex#2130326874, memberName: EnterAsync, message: State update lock released
CloseTestDbg 51.533 13:31:51.5338455 /1/6/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: CloseAsyncPrivate, message: Disposing cancellation registration
CloseTestDbg 51.533 13:31:51.5338721 /1/6/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: CloseAsyncPrivate, message: Cancellation registration disposed
CloseTestDbg 51.534 13:31:51.5340832 /1/6/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: CloseAsyncPrivate, message: System.Threading.Tasks.TaskCanceledException: A task was canceled.
   at System.Net.WebSockets.ManagedWebSocket.CloseAsyncPrivate(WebSocketCloseStatus closeStatus, String statusDescription, CancellationToken cancellationToken) in /_/src/libraries/System.Net.WebSockets/src/System/Net/WebSockets/ManagedWebSocket.cs:line 1522
CloseTestDbg 51.534 13:31:51.5341339 /1/6/ - [CloseStop] objName: ManagedWebSocket#433292681, memberName: CloseAsyncPrivate
CloseTestDbg 21.529 13:32:21.5291531 /1/5/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: Abort, message: Abort
CloseTestDbg 21.529 13:32:21.5292473 /1/5/ - [WsAsyncDbg] objName: ManagedWebSocket#433292681, memberName: Abort, message: State update lock taken
CloseTestDbg 21.529 13:32:21.5292764 /1/5/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: TransitionToAbortedCore, message: State transition from CloseSent to Aborted
CloseTestDbg 21.529 13:32:21.5292981 /1/5/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: DisposeCore, message: _disposed=False
CloseTestDbg 21.529 13:32:21.5293201 /1/5/ - [WsAsyncDbg] objName: ManagedWebSocket#433292681, memberName: Abort, message: State update lock released
CloseTestDbg 21.529 13:32:21.5294450 /  [WsTrace] objName: ManagedWebSocket#433292681, memberName: UnsolicitedPongHeartBeat, message: UnsolicitedPongHeartBeat
CloseTestDbg 21.531 13:32:21.5315824 /1/5/ - [WsTrace] objName: ManagedWebSocket#433292681, memberName: ReceiveAsyncPrivate, message: System.Threading.Tasks.TaskCanceledException: The operation was canceled.
 ---> System.IO.IOException: Unable to read data from the transport connection: Operation canceled.
 ---> System.Net.Sockets.SocketException (125): Operation canceled
   --- End of inner exception stack trace ---
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken) in /_/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.Tasks.cs:line 1386
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource<System.Int32>.GetResult(Int16 token) in /_/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.Tasks.cs:line 1283
   at System.Net.Http.HttpConnection.RawConnectionStream.ReadAsync(Memory`1 buffer, CancellationToken cancellationToken) in /_/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RawConnectionStream.cs:line 67
   --- End of inner exception stack trace ---
   at System.Net.Http.HttpConnection.RawConnectionStream.ReadAsync(Memory`1 buffer, CancellationToken cancellationToken) in /_/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RawConnectionStream.cs:line 71
   at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1[[System.Int32, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Net.Http.HttpConnection.RawConnectionStream.<ReadAsync>d__6, System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]].System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token) in /_/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/PoolingAsyncValueTaskMethodBuilderT.cs:line 422
   at System.IO.Stream.ReadAtLeastAsyncCore(Memory`1 buffer, Int32 minimumBytes, Boolean throwOnEndOfStream, CancellationToken cancellationToken) in /_/src/libraries/System.Private.CoreLib/src/System/IO/Stream.cs:line 433
   at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1[[System.Int32, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.IO.Stream.<ReadAtLeastAsyncCore>d__46, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token) in /_/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/PoolingAsyncValueTaskMethodBuilderT.cs:line 422
   at System.Net.WebSockets.ManagedWebSocket.EnsureBufferContainsAsync(Int32 minimumRequiredBytes, CancellationToken cancellationToken) in /_/src/libraries/System.Net.WebSockets/src/System/Net/WebSockets/ManagedWebSocket.cs:line 1662
   at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Net.WebSockets.ManagedWebSocket.<EnsureBufferContainsAsync>d__76, System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]].System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token) in /_/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/PoolingAsyncValueTaskMethodBuilderT.cs:line 435
   at System.Net.WebSockets.ManagedWebSocket.<ReceiveAsyncPrivate>d__65`1[[System.Net.WebSockets.WebSocketReceiveResult, System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]].MoveNext() in /_/src/libraries/System.Net.WebSockets/src/System/Net/WebSockets/ManagedWebSocket.cs:line 850
CloseTestDbg 21.532 13:32:21.5324103 /1/5/ - [MutexExit] objName: AsyncMutex#2130326874, memberName: ReceiveAsyncPrivate
CloseTestDbg 21.532 13:32:21.5325022 /1/5/ - [ReceiveStop] objName: ManagedWebSocket#433292681, memberName: ReceiveAsyncPrivate
CloseTestDbg 21.533 13:32:21.5331736 /  [WsTrace] objName: ManagedWebSocket#433292681, memberName: TrySendKeepAliveFrameAsync, message: Cannot send keep-alive frame in _state=Aborted
CloseTestDbg 21.535 13:32:21.5353362 /  [WsTrace] objName: ManagedWebSocket#433292681, memberName: Dispose, message: Dispose
CloseTestDbg 21.535 13:32:21.5353831 /  [WsAsyncDbg] objName: ManagedWebSocket#433292681, memberName: Dispose, message: State update lock taken
CloseTestDbg 21.535 13:32:21.5354032 /  [WsTrace] objName: ManagedWebSocket#433292681, memberName: DisposeCore, message: _disposed=True
CloseTestDbg 21.535 13:32:21.5354558 /  [WsAsyncDbg] objName: ManagedWebSocket#433292681, memberName: Dispose, message: State update lock released


    System.Net.WebSockets.Client.Tests.CloseTestDbg.CloseAsync_CancelableEvenWhenPendingReceive_Throws [FAIL]
      Assert.Throws() Failure: Exception type was not an exact match
      Expected: typeof(System.OperationCanceledException)
      Actual:   typeof(System.Threading.Tasks.TaskCanceledException)
      ---- System.Threading.Tasks.TaskCanceledException : The operation was canceled.
      -------- System.IO.IOException : Unable to read data from the transport connection: Operation canceled.
      ------------ System.Net.Sockets.SocketException : Operation canceled
      Stack Trace:
        /_/src/libraries/System.Net.WebSockets.Client/tests/CloseTest_Tracing.cs(123,0): at System.Net.WebSockets.Client.Tests.CloseTestDbg.<>c__DisplayClass1_0.<<CloseAsync_CancelableEvenWhenPendingReceive_Throws>b__0>d.MoveNext()
        --- End of stack trace from previous location ---
        /_/src/libraries/Common/tests/System/Threading/Tasks/TaskTimeoutExtensions.cs(120,0): at System.Threading.Tasks.TaskTimeoutExtensions.GetRealException(Task task)
        --- End of stack trace from previous location ---
        /_/src/libraries/Common/tests/System/Threading/Tasks/TaskTimeoutExtensions.cs(90,0): at System.Threading.Tasks.TaskTimeoutExtensions.WhenAllOrAnyFailed(Task[] tasks)
        /_/src/libraries/Common/tests/System/Net/Http/LoopbackServer.cs(123,0): at System.Net.Test.Common.LoopbackServer.<>c__DisplayClass15_0.<<CreateClientAndServerAsync>b__0>d.MoveNext()
        --- End of stack trace from previous location ---
        /_/src/libraries/Common/tests/System/Net/Http/LoopbackServer.cs(107,0): at System.Net.Test.Common.LoopbackServer.CreateServerAsync(Func`2 funcAsync, Options options)
        /_/src/libraries/System.Net.WebSockets.Client/tests/CloseTest_Tracing.cs(50,0): at System.Net.WebSockets.Client.Tests.CloseTestDbg.CloseAsync_CancelableEvenWhenPendingReceive_Throws()
        --- End of stack trace from previous location ---
        ----- Inner Stack Trace -----
        /_/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RawConnectionStream.cs(71,0): at System.Net.Http.HttpConnection.RawConnectionStream.ReadAsync(Memory`1 buffer, CancellationToken cancellationToken)
        /_/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/PoolingAsyncValueTaskMethodBuilderT.cs(422,0): at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1[[System.Int32, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Net.Http.HttpConnection.RawConnectionStream.<ReadAsync>d__6, System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]].System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
        /_/src/libraries/System.Private.CoreLib/src/System/IO/Stream.cs(433,0): at System.IO.Stream.ReadAtLeastAsyncCore(Memory`1 buffer, Int32 minimumBytes, Boolean throwOnEndOfStream, CancellationToken cancellationToken)
        /_/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/PoolingAsyncValueTaskMethodBuilderT.cs(422,0): at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1[[System.Int32, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.IO.Stream.<ReadAtLeastAsyncCore>d__46, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
        /_/src/libraries/System.Net.WebSockets/src/System/Net/WebSockets/ManagedWebSocket.cs(1662,0): at System.Net.WebSockets.ManagedWebSocket.EnsureBufferContainsAsync(Int32 minimumRequiredBytes, CancellationToken cancellationToken)
        /_/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/PoolingAsyncValueTaskMethodBuilderT.cs(435,0): at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Net.WebSockets.ManagedWebSocket.<EnsureBufferContainsAsync>d__76, System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]].System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
        /_/src/libraries/System.Net.WebSockets/src/System/Net/WebSockets/ManagedWebSocket.cs(1023,0): at System.Net.WebSockets.ManagedWebSocket.<ReceiveAsyncPrivate>d__65`1[[System.Net.WebSockets.WebSocketReceiveResult, System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]].MoveNext()
        /_/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/PoolingAsyncValueTaskMethodBuilderT.cs(422,0): at System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1[[System.Net.WebSockets.WebSocketReceiveResult, System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a],[System.Net.WebSockets.ManagedWebSocket.<ReceiveAsyncPrivate>d__65`1[[System.Net.WebSockets.WebSocketReceiveResult, System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]], System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]].System.Threading.Tasks.Sources.IValueTaskSource<TResult>.GetResult(Int16 token)
        /_/src/libraries/System.Private.CoreLib/src/System/Threading/Tasks/ValueTask.cs(665,0): at System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c[[System.Net.WebSockets.WebSocketReceiveResult, System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]].<.cctor>b__4_0(Object state)
        --- End of stack trace from previous location ---
        ----- Inner Stack Trace -----
        /_/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.Tasks.cs(1386,0): at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
        /_/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.Tasks.cs(1283,0): at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource<System.Int32>.GetResult(Int16 token)
        /_/src/libraries/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RawConnectionStream.cs(67,0): at System.Net.Http.HttpConnection.RawConnectionStream.ReadAsync(Memory`1 buffer, CancellationToken cancellationToken)
        ----- Inner Stack Trace -----

Copy link
Contributor

Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it.

@karelz karelz added this to the 9.0.0 milestone Sep 3, 2024
@github-actions github-actions bot locked and limited conversation to collaborators Oct 4, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants