Skip to content

Commit c5721fb

Browse files

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

src/Servers/Kestrel/Core/src/Internal/Http3/Http3Stream.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ internal abstract partial class Http3Stream : HttpProtocol, IHttp3Stream, IHttpS
6363

6464
public bool EndStreamReceived => (_completionState & StreamCompletionFlags.EndStreamReceived) == StreamCompletionFlags.EndStreamReceived;
6565
public bool IsAborted => (_completionState & StreamCompletionFlags.Aborted) == StreamCompletionFlags.Aborted;
66+
private bool IsAbortedRead => (_completionState & StreamCompletionFlags.AbortedRead) == StreamCompletionFlags.AbortedRead;
6667
public bool IsCompleted => (_completionState & StreamCompletionFlags.Completed) == StreamCompletionFlags.Completed;
6768

6869
public Pipe RequestBodyPipe { get; private set; } = default!;
@@ -892,12 +893,20 @@ private Task ProcessDataFrameAsync(in ReadOnlySequence<byte> payload)
892893
InputRemaining -= payload.Length;
893894
}
894895

895-
foreach (var segment in payload)
896+
lock (_completionLock)
896897
{
897-
RequestBodyPipe.Writer.Write(segment.Span);
898-
}
898+
if (IsAborted || IsAbortedRead)
899+
{
900+
return Task.CompletedTask;
901+
}
899902

900-
return RequestBodyPipe.Writer.FlushAsync().GetAsTask();
903+
foreach (var segment in payload)
904+
{
905+
RequestBodyPipe.Writer.Write(segment.Span);
906+
}
907+
908+
return RequestBodyPipe.Writer.FlushAsync().GetAsTask();
909+
}
901910
}
902911

903912
protected override void OnReset()

0 commit comments

Comments
 (0)