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++;