From b6b81afea7a2c4912beaba7b32bc54b622e01e98 Mon Sep 17 00:00:00 2001 From: wfurt Date: Mon, 16 May 2022 18:05:45 -0700 Subject: [PATCH 1/3] pool async state in SslStream --- .../src/System/Net/Security/SslStream.IO.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Net.Security/src/System/Net/Security/SslStream.IO.cs b/src/libraries/System.Net.Security/src/System/Net/Security/SslStream.IO.cs index b9457b067a097c..44163221458869 100644 --- a/src/libraries/System.Net.Security/src/System/Net/Security/SslStream.IO.cs +++ b/src/libraries/System.Net.Security/src/System/Net/Security/SslStream.IO.cs @@ -2,9 +2,9 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Buffers; -using System.ComponentModel; using System.Diagnostics; using System.IO; +using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; using System.Security.Authentication; using System.Security.Cryptography.X509Certificates; @@ -675,7 +675,7 @@ private bool HaveFullTlsFrame(out int frameSize) return _buffer.EncryptedLength >= frameSize; } - + [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder<>))] private async ValueTask EnsureFullTlsFrameAsync(CancellationToken cancellationToken) where TIOAdapter : IReadWriteAdapter { @@ -760,6 +760,7 @@ private SecurityStatusPal DecryptData(int frameSize) return status; } + [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder<>))] private async ValueTask ReadAsyncInternal(Memory buffer, CancellationToken cancellationToken) where TIOAdapter : IReadWriteAdapter { From 2968754c6a43b1e80ff0aeae3137602e44539b34 Mon Sep 17 00:00:00 2001 From: wfurt Date: Mon, 16 May 2022 21:19:49 -0700 Subject: [PATCH 2/3] fix tests --- .../tests/FunctionalTests/SslStreamNetworkStreamTest.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamNetworkStreamTest.cs b/src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamNetworkStreamTest.cs index b7809488712f82..1217935aef66a7 100644 --- a/src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamNetworkStreamTest.cs +++ b/src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamNetworkStreamTest.cs @@ -969,7 +969,7 @@ public async Task SslStream_RandomSizeWrites_OK(int bufferSize, int readBufferSi int writeLength = Math.Min(data.Length, writeBufferSize); if (useAsync) { - server.WriteAsync(data.Slice(0, writeLength)).GetAwaiter().GetResult(); + server.WriteAsync(data.Slice(0, writeLength)).AsTask().GetAwaiter().GetResult(); } else { @@ -992,7 +992,7 @@ public async Task SslStream_RandomSizeWrites_OK(int bufferSize, int readBufferSi { if (useAsync) { - readLength = client.ReadAsync(readBuffer.Slice(totalLength, readBufferSize)).GetAwaiter().GetResult(); + readLength = client.ReadAsync(readBuffer.Slice(totalLength, readBufferSize)).AsTask().GetAwaiter().GetResult(); } else { From 0e75329b42c4ed71afd8c5b5e932bb79c7c7646d Mon Sep 17 00:00:00 2001 From: wfurt Date: Mon, 23 May 2022 12:19:59 -0700 Subject: [PATCH 3/3] remove GetAwaiter from test --- .../FunctionalTests/SslStreamNetworkStreamTest.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamNetworkStreamTest.cs b/src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamNetworkStreamTest.cs index 1217935aef66a7..2de22f5325cd39 100644 --- a/src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamNetworkStreamTest.cs +++ b/src/libraries/System.Net.Security/tests/FunctionalTests/SslStreamNetworkStreamTest.cs @@ -961,7 +961,7 @@ public async Task SslStream_RandomSizeWrites_OK(int bufferSize, int readBufferSi await TestConfiguration.WhenAllOrAnyFailedWithTimeout(t1, t2); - Task writer = Task.Run(() => + Task writer = Task.Run(async () => { Memory data = new Memory(dataToCopy); while (data.Length > 0) @@ -969,11 +969,12 @@ public async Task SslStream_RandomSizeWrites_OK(int bufferSize, int readBufferSi int writeLength = Math.Min(data.Length, writeBufferSize); if (useAsync) { - server.WriteAsync(data.Slice(0, writeLength)).AsTask().GetAwaiter().GetResult(); + await server.WriteAsync(data.Slice(0, writeLength)); } else { server.Write(data.Span.Slice(0, writeLength)); + await Task.CompletedTask; } data = data.Slice(Math.Min(writeBufferSize, data.Length)); @@ -982,7 +983,7 @@ public async Task SslStream_RandomSizeWrites_OK(int bufferSize, int readBufferSi server.ShutdownAsync().GetAwaiter().GetResult(); }); - Task reader = Task.Run(() => + Task reader = Task.Run(async () => { Memory readBuffer = new Memory(dataReceived); int totalLength = 0; @@ -992,11 +993,12 @@ public async Task SslStream_RandomSizeWrites_OK(int bufferSize, int readBufferSi { if (useAsync) { - readLength = client.ReadAsync(readBuffer.Slice(totalLength, readBufferSize)).AsTask().GetAwaiter().GetResult(); + readLength = await client.ReadAsync(readBuffer.Slice(totalLength, readBufferSize)); } else { readLength = client.Read(readBuffer.Span.Slice(totalLength, readBufferSize)); + await Task.CompletedTask; } if (readLength == 0)