Skip to content
This repository was archived by the owner on Dec 18, 2018. It is now read-only.

Commit feb4040

Browse files
committed
merge preamble-output, socket-output
1 parent a3173c4 commit feb4040

File tree

9 files changed

+172
-200
lines changed

9 files changed

+172
-200
lines changed

src/Microsoft.AspNet.Server.Kestrel/Filter/LibuvStream.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,29 @@ public override Task<int> ReadAsync(byte[] buffer, int offset, int count, Cancel
6868

6969
public override void Write(byte[] buffer, int offset, int count)
7070
{
71-
var segment = new ArraySegment<byte>(buffer, offset, count);
71+
ArraySegment<byte> segment;
72+
if (buffer != null)
73+
{
74+
segment = new ArraySegment<byte>(buffer, offset, count);
75+
}
76+
else
77+
{
78+
segment = default(ArraySegment<byte>);
79+
}
7280
_output.Write(segment);
7381
}
7482

7583
public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken token)
7684
{
77-
var segment = new ArraySegment<byte>(buffer, offset, count);
85+
ArraySegment<byte> segment;
86+
if (buffer != null)
87+
{
88+
segment = new ArraySegment<byte>(buffer, offset, count);
89+
}
90+
else
91+
{
92+
segment = default(ArraySegment<byte>);
93+
}
7894
return _output.WriteAsync(segment, cancellationToken: token);
7995
}
8096

src/Microsoft.AspNet.Server.Kestrel/Filter/StreamSocketOutput.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public void ProducingComplete(MemoryPoolIterator2 end, int count)
5252
returnBlock.Pool?.Return(returnBlock);
5353
}
5454

55-
_outputStream.Write(end.Block.Array, end.Block.Data.Offset, end.Index);
55+
_outputStream.Write(end.Block.Array, end.Block.Data.Offset, end.Index - end.Block.Data.Offset);
5656
end.Block.Pool?.Return(end.Block);
5757
}
5858
}

src/Microsoft.AspNet.Server.Kestrel/Http/Frame.cs

Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -623,8 +623,8 @@ private Task CreateResponseHeader(
623623
bool appCompleted,
624624
bool immediate)
625625
{
626-
var memoryBlock = Memory2.Lease();
627-
var begin = memoryBlock.GetIterator();
626+
var begin = SocketOutput.ProducingStart();
627+
var count = 0;
628628
var end = begin;
629629
if (_keepAlive)
630630
{
@@ -673,48 +673,20 @@ private Task CreateResponseHeader(
673673
_responseHeaders.SetRawConnection("keep-alive", _bytesConnectionKeepAlive);
674674
}
675675

676-
end.CopyFrom(_httpVersion == HttpVersionType.Http1_1 ? _bytesHttpVersion1_1 : _bytesHttpVersion1_0);
677-
end.CopyFrom(statusBytes);
678-
_responseHeaders.CopyTo(ref end);
679-
end.CopyFrom(_bytesEndHeaders, 0, _bytesEndHeaders.Length);
676+
count += end.CopyFrom(_httpVersion == HttpVersionType.Http1_1 ? _bytesHttpVersion1_1 : _bytesHttpVersion1_0);
677+
count += end.CopyFrom(statusBytes);
678+
count += _responseHeaders.CopyTo(ref end);
679+
count += end.CopyFrom(_bytesEndHeaders, 0, _bytesEndHeaders.Length);
680680

681-
// TODO: change this to SocketOutput.ProduceStart/ProduceComplete once that change is made
682-
var scan = begin.Block;
683-
while (scan.Next != null)
684-
{
685-
if (scan.Start != scan.End)
686-
{
687-
SocketOutput.WriteAsync(
688-
new ArraySegment<byte>(scan.Array, scan.Start, scan.End - scan.Start),
689-
false);
690-
}
691-
var next = scan.Next;
692-
Memory2.Return(scan);
693-
scan = next;
694-
}
695-
var writeTask = SocketOutput.WriteAsync(
696-
new ArraySegment<byte>(scan.Array, scan.Start, scan.End - scan.Start),
697-
immediate);
681+
SocketOutput.ProducingComplete(end, count);
698682

699-
if (writeTask.IsCompleted)
683+
if (immediate)
700684
{
701-
Memory2.Return(scan);
702-
return TaskUtilities.CompletedTask;
685+
return SocketOutput.WriteAsync(default(ArraySegment<byte>), immediate: true);
703686
}
704687
else
705688
{
706-
return writeTask.ContinueWith(
707-
(t, o) =>
708-
{
709-
var mb = (MemoryPoolBlock2)o;
710-
mb.Pool.Return(mb);
711-
712-
if (t.IsFaulted)
713-
{
714-
throw t.Exception;
715-
}
716-
},
717-
scan);
689+
return TaskUtilities.CompletedTask;
718690
}
719691
}
720692

0 commit comments

Comments
 (0)