Log before releasing streams and firing tokens (#7583)

Might fix: https://github.com/aspnet/AspNetCore-Internal/issues/1659

I think writes complete too fast so we don't observe when the message gets logged
This commit is contained in:
Pavel Krymets 2019-02-15 10:41:21 -08:00 committed by GitHub
parent 25f1f59378
commit 6bafb7cb6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 19 deletions

View File

@ -116,7 +116,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
}
catch (ConnectionResetException ex)
{
ConnectionReset();
AbortIO(clientDisconnect: true);
error = ex;
}
catch (Exception ex)
@ -171,7 +171,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
// We want to swallow IO exception and allow app to finish writing
catch (ConnectionResetException)
{
ConnectionReset();
AbortIO(clientDisconnect: true);
}
catch (Exception ex)
{
@ -184,11 +184,16 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
}
}
private bool AbortIO()
internal void AbortIO(bool clientDisconnect)
{
if (Interlocked.CompareExchange(ref _requestAborted, 1, 0) != 0)
{
return false;
return;
}
if (clientDisconnect)
{
Log.ConnectionDisconnect(_logger, ((IHttpConnectionFeature)this).ConnectionId);
}
_bodyOutput.Dispose();
@ -208,8 +213,6 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
}
});
}
return true;
}
public void Abort(Exception reason)
@ -218,15 +221,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
_streams.Abort(reason);
NativeMethods.HttpCloseConnection(_pInProcessHandler);
AbortIO();
}
internal void ConnectionReset()
{
if (AbortIO())
{
Log.ConnectionDisconnect(_logger, ((IHttpConnectionFeature)this).ConnectionId);
}
AbortIO(clientDisconnect: false);
}
}
}

View File

@ -263,7 +263,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
// don't leak the exception
catch (ConnectionResetException)
{
ConnectionReset();
AbortIO(clientDisconnect: true);
}
}

View File

@ -164,7 +164,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
try
{
context = (IISHttpContext)GCHandle.FromIntPtr(pvManagedHttpContext).Target;
context.ConnectionReset();
context.AbortIO(clientDisconnect: true);
}
catch (Exception ex)
{

View File

@ -209,9 +209,9 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
{
Assert.IsType<OperationCanceledException>(exception);
}
catch (Exception e)
catch (Exception)
{
Logger.LogError(e, "Unexpected exception");
Logger.LogError(exception, "Unexpected exception type");
throw;
}
}