[release/9.0-staging] Fix race condition in cleanup of collectible thread static variables #111275
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.
Backport of #111257 to release/9.0-staging
/cc @davidwrighton
Customer Impact
This race condition causes an access violation in the EE accessing null when a collectible assembly is partially collected and a thread is terminated. And that thread used a collectible tls static. Found by dnceng in a CI environment.
Regression
This was introduced with the statics rewrite.
Testing
New stress test was written to verify the fix. A cut down variant of the stress test has been added as part of the fix.
Risk
Low , fix is effectively a null check that just skips doing the problematic operation.
IMPORTANT: If this backport is for a servicing release, please verify that:
release/X.0-staging
, notrelease/X.0
.Package authoring no longer needed in .NET 9
IMPORTANT: Starting with .NET 9, you no longer need to edit a NuGet package's csproj to enable building and bump the version.
Keep in mind that we still need package authoring in .NET 8 and older versions.