Fix crashing InMemory.FunctionalTests #59821
Open
+1
−3
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
InMemory.FunctionalTests has crashed before due to an exception in a background task. When the
InMemoryTransportConnection
is closed it queues a callback to the threadpool which sets aTaskCompletionSource
. If the callback is queued more than once the TCS will be set multiple times which is an error and exceptions in threadpool items will crash the process.Simple fix is to avoid queuing the threapool item multiple times by making our closed bool set/check an atomic operation.
One test that would hit this is
aspnetcore/src/Servers/Kestrel/test/InMemory.FunctionalTests/ConnectionLimitTests.cs
Line 27 in f655a4a
where it would dispose the connection from test code, while in parallel the app code would start cleaning up which would call
Abort
.