From 67f7bd99773edeb636e9f373bb493492828fddc5 Mon Sep 17 00:00:00 2001 From: Geoffrey Kizer Date: Fri, 5 Nov 2021 11:47:09 -0700 Subject: [PATCH] ensure the AcceptSocket is cleared when AcceptAsync completes --- .../src/System/Net/Sockets/Socket.Tasks.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.Tasks.cs b/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.Tasks.cs index ad35f7138117e3..cb04d92d744c23 100644 --- a/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.Tasks.cs +++ b/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.Tasks.cs @@ -62,7 +62,8 @@ public ValueTask AcceptAsync(Socket? acceptSocket, CancellationToken can Interlocked.Exchange(ref _singleBufferSendEventArgs, null) ?? new AwaitableSocketAsyncEventArgs(this, isReceiveForCaching: false); - Debug.Assert(saea.BufferList == null); + Debug.Assert(saea.BufferList is null); + Debug.Assert(saea.AcceptSocket is null); saea.SetBuffer(null, 0, 0); saea.AcceptSocket = acceptSocket; saea.WrapExceptionsForNetworkStream = false; @@ -1048,6 +1049,8 @@ public ValueTask AcceptAsync(Socket socket, CancellationToken cancellati Socket acceptSocket = AcceptSocket!; SocketError error = SocketError; + AcceptSocket = null; + Release(); return error == SocketError.Success ? @@ -1405,6 +1408,8 @@ Socket IValueTaskSource.GetResult(short token) Socket acceptSocket = AcceptSocket!; CancellationToken cancellationToken = _cancellationToken; + AcceptSocket = null; + Release(); if (error != SocketError.Success)