Skip to content

Commit

Permalink
Revert "Wait to dispose RequestAborted CTS (#4447)"
Browse files Browse the repository at this point in the history
This reverts commit 0622513.
  • Loading branch information
halter73 committed Jan 24, 2019
1 parent f4c5ac7 commit 5d554ae
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 41 deletions.
1 change: 0 additions & 1 deletion eng/PatchConfig.props
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ Later on, this will be checked using this condition:
Microsoft.AspNetCore.Mvc.Core;
Microsoft.AspNetCore.Routing;
Microsoft.AspNetCore.Server.IIS;
Microsoft.AspNetCore.Server.Kestrel.Core;
java:signalr;
</PackagesInPatch>
</PropertyGroup>
Expand Down
36 changes: 20 additions & 16 deletions src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.cs
Original file line number Diff line number Diff line change
Expand Up @@ -348,8 +348,11 @@ public void Reset()
// Lock to prevent CancelRequestAbortedToken from attempting to cancel an disposed CTS.
lock (_abortLock)
{
_abortedCts?.Dispose();
_abortedCts = null;
if (!_requestAborted)
{
_abortedCts?.Dispose();
_abortedCts = null;
}
}

_requestHeadersParsed = 0;
Expand Down Expand Up @@ -391,16 +394,15 @@ protected virtual bool BeginRead(out ValueTask<ReadResult> awaitable)

private void CancelRequestAbortedToken()
{
lock (_abortLock)
try
{
try
{
_abortedCts?.Cancel();
}
catch (Exception ex)
{
Log.ApplicationError(ConnectionId, TraceIdentifier, ex);
}
_abortedCts.Cancel();
_abortedCts.Dispose();
_abortedCts = null;
}
catch (Exception ex)
{
Log.ApplicationError(ConnectionId, TraceIdentifier, ex);
}
}

Expand All @@ -414,12 +416,12 @@ protected void AbortRequest()
}

_requestAborted = true;
}

if (_abortedCts != null && !_preventRequestAbortedCancellation)
{
// Potentially calling user code. CancelRequestAbortedToken logs any exceptions.
ServiceContext.Scheduler.Schedule(state => ((HttpProtocol)state).CancelRequestAbortedToken(), this);
}
if (_abortedCts != null)
{
// Potentially calling user code. CancelRequestAbortedToken logs any exceptions.
ServiceContext.Scheduler.Schedule(state => ((HttpProtocol)state).CancelRequestAbortedToken(), this);
}
}

Expand All @@ -439,6 +441,8 @@ private void PreventRequestAbortedCancellation()
}

_preventRequestAbortedCancellation = true;
_abortedCts?.Dispose();
_abortedCts = null;
}
}

Expand Down
25 changes: 1 addition & 24 deletions src/Servers/Kestrel/Core/test/Http1ConnectionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,7 @@ public Http1ConnectionTests()
var connectionFeatures = new FeatureCollection();
connectionFeatures.Set(Mock.Of<IConnectionLifetimeFeature>());

_serviceContext = new TestServiceContext()
{
Scheduler = PipeScheduler.Inline
};

_serviceContext = new TestServiceContext();
_timeoutControl = new Mock<ITimeoutControl>();
_http1ConnectionContext = new HttpConnectionContext
{
Expand Down Expand Up @@ -728,25 +724,6 @@ public async Task RequestAbortedTokenIsResetBeforeLastWriteWithChunkedEncoding()
Assert.False(_http1Connection.RequestAborted.IsCancellationRequested);
}

[Fact]
public void RequestAbortedTokenIsFullyUsableAfterCancellation()
{
var originalToken = _http1Connection.RequestAborted;
var originalRegistration = originalToken.Register(() => { });

_http1Connection.Abort(new ConnectionAbortedException());

Assert.True(originalToken.WaitHandle.WaitOne(TestConstants.DefaultTimeout));
Assert.True(_http1Connection.RequestAborted.WaitHandle.WaitOne(TestConstants.DefaultTimeout));

#if NETCOREAPP2_2
Assert.Equal(originalToken, originalRegistration.Token);
#elif NET461
#else
#error Target framework needs to be updated
#endif
}

[Fact]
public async Task ExceptionDetailNotIncludedWhenLogLevelInformationNotEnabled()
{
Expand Down

0 comments on commit 5d554ae

Please sign in to comment.