diff --git a/src/Servers/Kestrel/Transport.Sockets/src/Internal/SocketConnection.cs b/src/Servers/Kestrel/Transport.Sockets/src/Internal/SocketConnection.cs index ccfabeb3101550a10edc3ffb0bfcd2885ca3d4ca..fc1be0b47e134e955c69b755c1554303754ee28f 100644 --- a/src/Servers/Kestrel/Transport.Sockets/src/Internal/SocketConnection.cs +++ b/src/Servers/Kestrel/Transport.Sockets/src/Internal/SocketConnection.cs @@ -33,7 +33,7 @@ internal sealed partial class SocketConnection : TransportConnection internal SocketConnection(Socket socket, MemoryPool<byte> memoryPool, - PipeScheduler transportScheduler, + PipeScheduler socketScheduler, ILogger logger, SocketSenderPool socketSenderPool, PipeOptions inputOptions, @@ -55,12 +55,7 @@ internal sealed partial class SocketConnection : TransportConnection ConnectionClosed = _connectionClosedTokenSource.Token; - // On *nix platforms, Sockets already dispatches to the ThreadPool. - // Yes, the IOQueues are still used for the PipeSchedulers. This is intentional. - // https://github.com/aspnet/KestrelHttpServer/issues/2573 - var awaiterScheduler = OperatingSystem.IsWindows() ? transportScheduler : PipeScheduler.Inline; - - _receiver = new SocketReceiver(awaiterScheduler); + _receiver = new SocketReceiver(socketScheduler); var pair = DuplexPipe.CreateConnectionPair(inputOptions, outputOptions); diff --git a/src/Servers/Kestrel/Transport.Sockets/src/SocketConnectionContextFactory.cs b/src/Servers/Kestrel/Transport.Sockets/src/SocketConnectionContextFactory.cs index 11e3aca312566dedfb429d5eb80345d651bc4362..4bd06f5cb6477717b1f4f05e29bbd61a08cdfde1 100644 --- a/src/Servers/Kestrel/Transport.Sockets/src/SocketConnectionContextFactory.cs +++ b/src/Servers/Kestrel/Transport.Sockets/src/SocketConnectionContextFactory.cs @@ -56,15 +56,13 @@ public sealed class SocketConnectionContextFactory : IDisposable { var memoryPool = _options.MemoryPoolFactory(); var transportScheduler = options.UnsafePreferInlineScheduling ? PipeScheduler.Inline : new IOQueue(); - // https://github.com/aspnet/KestrelHttpServer/issues/2573 - var awaiterScheduler = OperatingSystem.IsWindows() ? transportScheduler : PipeScheduler.Inline; _settings[i] = new QueueSettings() { Scheduler = transportScheduler, InputOptions = new PipeOptions(memoryPool, applicationScheduler, transportScheduler, maxReadBufferSize, maxReadBufferSize / 2, useSynchronizationContext: false), OutputOptions = new PipeOptions(memoryPool, transportScheduler, applicationScheduler, maxWriteBufferSize, maxWriteBufferSize / 2, useSynchronizationContext: false), - SocketSenderPool = new SocketSenderPool(awaiterScheduler), + SocketSenderPool = new SocketSenderPool(transportScheduler), MemoryPool = memoryPool, }; } @@ -73,8 +71,6 @@ public sealed class SocketConnectionContextFactory : IDisposable { var memoryPool = _options.MemoryPoolFactory(); var transportScheduler = options.UnsafePreferInlineScheduling ? PipeScheduler.Inline : PipeScheduler.ThreadPool; - // https://github.com/aspnet/KestrelHttpServer/issues/2573 - var awaiterScheduler = OperatingSystem.IsWindows() ? transportScheduler : PipeScheduler.Inline; _settings = new QueueSettings[] { new QueueSettings() @@ -82,7 +78,7 @@ public sealed class SocketConnectionContextFactory : IDisposable Scheduler = transportScheduler, InputOptions = new PipeOptions(memoryPool, applicationScheduler, transportScheduler, maxReadBufferSize, maxReadBufferSize / 2, useSynchronizationContext: false), OutputOptions = new PipeOptions(memoryPool, transportScheduler, applicationScheduler, maxWriteBufferSize, maxWriteBufferSize / 2, useSynchronizationContext: false), - SocketSenderPool = new SocketSenderPool(awaiterScheduler), + SocketSenderPool = new SocketSenderPool(PipeScheduler.Inline), MemoryPool = memoryPool, } }; @@ -101,7 +97,7 @@ public sealed class SocketConnectionContextFactory : IDisposable var connection = new SocketConnection(socket, setting.MemoryPool, - setting.Scheduler, + PipeScheduler.Inline, _logger, setting.SocketSenderPool, setting.InputOptions,