Skip to content
代码片段 群组 项目
未验证 提交 b1d2844a 编辑于 作者: Hao Kung's avatar Hao Kung 提交者: GitHub
浏览文件

release/6.0 port of abort handling (#41360)

上级 9b36c674
No related branches found
No related tags found
无相关合并请求
...@@ -162,6 +162,11 @@ namespace Microsoft.AspNetCore.Server.IIS.Core ...@@ -162,6 +162,11 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
var buffer = result.Buffer; var buffer = result.Buffer;
try try
{ {
if (_bodyOutput.Aborted)
{
break;
}
if (!buffer.IsEmpty) if (!buffer.IsEmpty)
{ {
await AsyncIO!.WriteAsync(buffer); await AsyncIO!.WriteAsync(buffer);
......
...@@ -13,9 +13,10 @@ namespace Microsoft.AspNetCore.Server.IIS.Core ...@@ -13,9 +13,10 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
{ {
internal class OutputProducer internal class OutputProducer
{ {
// This locks access to _completed. // This locks access to _completed and _aborted.
private readonly object _contextLock = new object(); private readonly object _contextLock = new object();
private bool _completed; private bool _completed;
private volatile bool _aborted;
private readonly Pipe _pipe; private readonly Pipe _pipe;
...@@ -32,6 +33,8 @@ namespace Microsoft.AspNetCore.Server.IIS.Core ...@@ -32,6 +33,8 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
} }
public PipeReader Reader => _pipe.Reader; public PipeReader Reader => _pipe.Reader;
public bool Aborted => _aborted;
public Task FlushAsync(CancellationToken cancellationToken) public Task FlushAsync(CancellationToken cancellationToken)
{ {
...@@ -44,7 +47,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core ...@@ -44,7 +47,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
{ {
lock (_contextLock) lock (_contextLock)
{ {
if (_completed) if (_completed || _aborted)
{ {
return; return;
} }
...@@ -58,12 +61,12 @@ namespace Microsoft.AspNetCore.Server.IIS.Core ...@@ -58,12 +61,12 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
{ {
lock (_contextLock) lock (_contextLock)
{ {
if (_completed) if (_completed || _aborted)
{ {
return; return;
} }
_completed = true; _aborted = true;
_pipe.Reader.CancelPendingRead(); _pipe.Reader.CancelPendingRead();
_pipe.Writer.Complete(); _pipe.Writer.Complete();
...@@ -74,7 +77,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core ...@@ -74,7 +77,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
{ {
lock (_contextLock) lock (_contextLock)
{ {
if (_completed) if (_completed || _aborted)
{ {
return Task.CompletedTask; return Task.CompletedTask;
} }
......
...@@ -33,7 +33,6 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests ...@@ -33,7 +33,6 @@ namespace Microsoft.AspNetCore.Server.IIS.FunctionalTests
} }
[ConditionalFact] [ConditionalFact]
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/31404")]
public async Task ClosesAfterDataSent() public async Task ClosesAfterDataSent()
{ {
var bodyReceived = CreateTaskCompletionSource(); var bodyReceived = CreateTaskCompletionSource();
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册