From e3509ecfd606c831f7bda8ded238dec514eb0c8c Mon Sep 17 00:00:00 2001 From: James Newton-King <james@newtonking.com> Date: Fri, 2 Sep 2022 12:53:09 +0800 Subject: [PATCH] QUIC: Don't complete writes on abort (#43630) --- src/Servers/Kestrel/Kestrel.slnf | 1 + .../Transport.Quic/src/Internal/QuicStreamContext.cs | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Servers/Kestrel/Kestrel.slnf b/src/Servers/Kestrel/Kestrel.slnf index 5841f4e4451..a9738032114 100644 --- a/src/Servers/Kestrel/Kestrel.slnf +++ b/src/Servers/Kestrel/Kestrel.slnf @@ -26,6 +26,7 @@ "src\\Middleware\\Diagnostics\\src\\Microsoft.AspNetCore.Diagnostics.csproj", "src\\Middleware\\HostFiltering\\src\\Microsoft.AspNetCore.HostFiltering.csproj", "src\\Middleware\\HttpOverrides\\src\\Microsoft.AspNetCore.HttpOverrides.csproj", + "src\\Middleware\\StaticFiles\\src\\Microsoft.AspNetCore.StaticFiles.csproj", "src\\ObjectPool\\src\\Microsoft.Extensions.ObjectPool.csproj", "src\\Security\\Authentication\\Core\\src\\Microsoft.AspNetCore.Authentication.csproj", "src\\Security\\Authorization\\Core\\src\\Microsoft.AspNetCore.Authorization.csproj", diff --git a/src/Servers/Kestrel/Transport.Quic/src/Internal/QuicStreamContext.cs b/src/Servers/Kestrel/Transport.Quic/src/Internal/QuicStreamContext.cs index 9a95793a59d..5f0a7d31e1a 100644 --- a/src/Servers/Kestrel/Transport.Quic/src/Internal/QuicStreamContext.cs +++ b/src/Servers/Kestrel/Transport.Quic/src/Internal/QuicStreamContext.cs @@ -465,7 +465,7 @@ internal partial class QuicStreamContext : TransportConnection, IPooledStream, I } finally { - ShutdownWrite(_shutdownWriteReason ?? _shutdownReason ?? shutdownReason); + ShutdownWrite(shutdownReason); await waitForWritesClosedTask; @@ -525,10 +525,14 @@ internal partial class QuicStreamContext : TransportConnection, IPooledStream, I { lock (_shutdownLock) { - _shutdownReason = shutdownReason ?? SendGracefullyCompletedException; + _shutdownReason = _shutdownWriteReason ?? _shutdownReason ?? shutdownReason ?? SendGracefullyCompletedException; QuicLog.StreamShutdownWrite(_log, this, _shutdownReason.Message); - _stream.CompleteWrites(); + // Only complete writes for a graceful shutdown. + if (_shutdownReason == SendGracefullyCompletedException) + { + _stream.CompleteWrites(); + } } } catch (Exception ex) -- GitLab