From f6dc72544c6c2c7fd35d1f676fcce309fa64a7f3 Mon Sep 17 00:00:00 2001 From: Louis DeJardin Date: Fri, 17 Jul 2015 07:43:06 -0700 Subject: [PATCH] Response headers don't need to be queued before subsequent write --- src/Microsoft.AspNet.Server.Kestrel/Http/Frame.cs | 7 ++++--- src/Microsoft.AspNet.Server.Kestrel/Http/ISocketOutput.cs | 2 +- src/Microsoft.AspNet.Server.Kestrel/Http/SocketOutput.cs | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.AspNet.Server.Kestrel/Http/Frame.cs b/src/Microsoft.AspNet.Server.Kestrel/Http/Frame.cs index d34b09e03c..ad798560c8 100644 --- a/src/Microsoft.AspNet.Server.Kestrel/Http/Frame.cs +++ b/src/Microsoft.AspNet.Server.Kestrel/Http/Frame.cs @@ -250,7 +250,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http public void Write(ArraySegment data, Action callback, object state) { - ProduceStart(); + ProduceStart(immediate: false); SocketOutput.Write(data, callback, state); } @@ -293,7 +293,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http } } - public void ProduceStart() + public void ProduceStart(bool immediate = true) { if (_resultStarted) return; _resultStarted = true; @@ -315,7 +315,8 @@ namespace Microsoft.AspNet.Server.Kestrel.Http } ((IDisposable)x).Dispose(); }, - responseHeader.Item2); + responseHeader.Item2, + immediate: immediate); } public void ProduceEnd(Exception ex) diff --git a/src/Microsoft.AspNet.Server.Kestrel/Http/ISocketOutput.cs b/src/Microsoft.AspNet.Server.Kestrel/Http/ISocketOutput.cs index 52f11f62ac..e4a57c5ebf 100644 --- a/src/Microsoft.AspNet.Server.Kestrel/Http/ISocketOutput.cs +++ b/src/Microsoft.AspNet.Server.Kestrel/Http/ISocketOutput.cs @@ -10,6 +10,6 @@ namespace Microsoft.AspNet.Server.Kestrel.Http /// public interface ISocketOutput { - void Write(ArraySegment buffer, Action callback, object state); + void Write(ArraySegment buffer, Action callback, object state, bool immediate = true); } } \ No newline at end of file diff --git a/src/Microsoft.AspNet.Server.Kestrel/Http/SocketOutput.cs b/src/Microsoft.AspNet.Server.Kestrel/Http/SocketOutput.cs index 78ab050e31..7ff695fc52 100644 --- a/src/Microsoft.AspNet.Server.Kestrel/Http/SocketOutput.cs +++ b/src/Microsoft.AspNet.Server.Kestrel/Http/SocketOutput.cs @@ -36,7 +36,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http _callbacksPending = new Queue(); } - public void Write(ArraySegment buffer, Action callback, object state) + public void Write(ArraySegment buffer, Action callback, object state, bool immediate) { //TODO: need buffering that works var copy = new byte[buffer.Count]; @@ -75,7 +75,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http }); } - if (_writesPending < _maxPendingWrites) + if (_writesPending < _maxPendingWrites && immediate) { ScheduleWrite(); _writesPending++;