Change disconnect to abort cts

This commit is contained in:
Ben Adams 2015-11-19 23:25:31 +00:00
parent 58d8c851c5
commit 3c7431aa35
1 changed files with 14 additions and 4 deletions

View File

@ -43,7 +43,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
private Task _requestProcessingTask;
private volatile bool _requestProcessingStopping; // volatile, see: https://msdn.microsoft.com/en-us/library/x13ttww7.aspx
private volatile bool _requestAborted;
private CancellationTokenSource _disconnectOrAbortedCts = new CancellationTokenSource();
private CancellationTokenSource _abortedCts;
private FrameRequestStream _requestBody;
private FrameResponseStream _responseBody;
@ -144,6 +144,9 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
}
_prepareRequest?.Invoke(this);
_abortedCts?.Dispose();
_abortedCts = null;
}
public void ResetResponseHeaders()
@ -196,12 +199,17 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
ConnectionControl.End(ProduceEndType.SocketDisconnect);
SocketInput.AbortAwaiting();
_disconnectOrAbortedCts.Cancel();
_abortedCts?.Cancel();
}
catch (Exception ex)
{
Log.LogError("Abort", ex);
}
finally
{
_abortedCts?.Dispose();
_abortedCts = null;
}
}
/// <summary>
@ -245,7 +253,8 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
ResponseBody = _responseBody;
DuplexStream = new FrameDuplexStream(RequestBody, ResponseBody);
RequestAborted = _disconnectOrAbortedCts.Token;
_abortedCts = new CancellationTokenSource();
RequestAborted = _abortedCts.Token;
var httpContext = HttpContextFactory.Create(this);
try
@ -298,7 +307,8 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
{
try
{
_disconnectOrAbortedCts.Dispose();
_abortedCts?.Dispose();
_abortedCts = null;
// If _requestAborted is set, the connection has already been closed.
if (!_requestAborted)