From 6a1367ff708534fadb64bd51573d70a8f276ab12 Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Mon, 2 Apr 2018 16:44:31 -0700 Subject: [PATCH 1/2] Reaction to *Memory changes (#1824) --- build/dependencies.props | 24 +++++++++---------- .../HttpConnection.cs | 2 +- .../PipeReaderExtensions.cs | 4 ++-- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index d6bbb1028f..b462993aba 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -12,7 +12,7 @@ 2.1.0-preview2-30478 2.1.0-preview2-30478 2.1.0-preview2-30478 - 2.1.0-a-preview2-iconnection-17631 + 2.1.0-a-preview2-mpr-17640 2.1.0-preview2-30478 2.1.0-preview2-30478 2.1.0-preview2-30478 @@ -26,12 +26,12 @@ 2.1.0-preview2-30478 2.1.0-preview2-30478 0.5.0-preview2-30478 - 2.1.0-a-preview2-iconnection-17631 + 2.1.0-a-preview2-mpr-17640 2.1.0-preview2-30478 2.1.0-preview2-30478 2.1.0-preview2-30478 - 2.1.0-preview2-30478 - 4.5.0-preview2-26326-04 + 2.1.0-a-preview2-mpr-16572 + 4.5.0-preview3-26331-02 2.1.0-preview2-30478 2.1.0-preview2-30478 2.1.0-preview2-30478 @@ -54,21 +54,21 @@ 2.1.0-preview2-30478 2.1.0-preview2-30478 2.0.0 - 2.1.0-preview2-26326-03 + 2.1.0-preview3-26331-01 15.6.1 4.7.49 1.0.0-rc 11.0.2 1.2.4 - 4.5.0-preview2-26326-04 - 4.5.0-preview2-26326-04 - 4.5.0-preview2-26326-04 - 4.5.0-preview2-26326-04 + 4.5.0-preview3-26331-02 + 4.5.0-preview3-26331-02 + 4.5.0-preview3-26331-02 + 4.5.0-preview3-26331-02 3.1.1 4.3.0 - 4.5.0-preview2-26326-04 - 4.5.0-preview2-26326-04 - 4.5.0-preview2-26326-04 + 4.5.0-preview3-26331-02 + 4.5.0-preview3-26331-02 + 4.5.0-preview3-26331-02 2.3.1 2.4.0-beta.1.build3945 diff --git a/src/Microsoft.AspNetCore.Http.Connections.Client/HttpConnection.cs b/src/Microsoft.AspNetCore.Http.Connections.Client/HttpConnection.cs index e7c27a5146..1e56e4238f 100644 --- a/src/Microsoft.AspNetCore.Http.Connections.Client/HttpConnection.cs +++ b/src/Microsoft.AspNetCore.Http.Connections.Client/HttpConnection.cs @@ -332,7 +332,7 @@ namespace Microsoft.AspNetCore.Http.Connections.Client private async Task StartTransport(Uri connectUrl, TransportType transportType, TransferFormat transferFormat) { // Create the pipe pair (Application's writer is connected to Transport's reader, and vice versa) - var options = new PipeOptions(writerScheduler: PipeScheduler.ThreadPool, readerScheduler: PipeScheduler.ThreadPool, useSynchronizationContext: false); + var options = new PipeOptions(writerScheduler: PipeScheduler.ThreadPool, readerScheduler: PipeScheduler.ThreadPool, useSynchronizationContext: false, pauseWriterThreshold: 0, resumeWriterThreshold: 0); var pair = DuplexPipe.CreateConnectionPair(options, options); // Construct the transport diff --git a/test/Microsoft.AspNetCore.SignalR.Tests.Utils/PipeReaderExtensions.cs b/test/Microsoft.AspNetCore.SignalR.Tests.Utils/PipeReaderExtensions.cs index df2af40261..283e7d65dc 100644 --- a/test/Microsoft.AspNetCore.SignalR.Tests.Utils/PipeReaderExtensions.cs +++ b/test/Microsoft.AspNetCore.SignalR.Tests.Utils/PipeReaderExtensions.cs @@ -28,8 +28,8 @@ namespace System.IO.Pipelines } finally { - // Consume nothing, just wait for everything - pipeReader.AdvanceTo(result.Buffer.Start, result.Buffer.End); + // Don't consume or advance + pipeReader.AdvanceTo(result.Buffer.Start, result.Buffer.Start); } } } From 5e190b404fa7b806ffbe50d99971ffac9ee2c1ee Mon Sep 17 00:00:00 2001 From: David Fowler Date: Wed, 4 Apr 2018 13:00:20 -0700 Subject: [PATCH 2/2] Remove lazily initialization of the pipes - This fixes race condition --- .../HttpConnectionDispatcher.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.AspNetCore.Http.Connections/HttpConnectionDispatcher.cs b/src/Microsoft.AspNetCore.Http.Connections/HttpConnectionDispatcher.cs index 9ba8182277..41a6ba002b 100644 --- a/src/Microsoft.AspNetCore.Http.Connections/HttpConnectionDispatcher.cs +++ b/src/Microsoft.AspNetCore.Http.Connections/HttpConnectionDispatcher.cs @@ -381,6 +381,8 @@ namespace Microsoft.AspNetCore.Http.Connections // Establish the connection var connection = _manager.CreateConnection(); + EnsureConnectionStateInternal(connection, options); + // Set the Connection ID on the logging scope so that logs from now on will have the // Connection ID metadata set. logScope.ConnectionId = connection.ConnectionId; @@ -602,8 +604,6 @@ namespace Microsoft.AspNetCore.Http.Connections return null; } - EnsureConnectionStateInternal(connection, options); - return connection; } @@ -630,6 +630,7 @@ namespace Microsoft.AspNetCore.Http.Connections if (StringValues.IsNullOrEmpty(connectionId)) { connection = _manager.CreateConnection(); + EnsureConnectionStateInternal(connection, options); } else if (!_manager.TryGetConnection(connectionId, out connection)) { @@ -639,8 +640,6 @@ namespace Microsoft.AspNetCore.Http.Connections return null; } - EnsureConnectionStateInternal(connection, options); - return connection; }