-
Notifications
You must be signed in to change notification settings - Fork 4.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[release/9.0-staging] Exit the lock before we call into user code and handle losing the race for the RCW table #111162
Merged
jkoritzinsky
merged 16 commits into
release/9.0-staging
from
backport/pr-110828-to-release/9.0-staging
Jan 8, 2025
Merged
[release/9.0-staging] Exit the lock before we call into user code and handle losing the race for the RCW table #111162
jkoritzinsky
merged 16 commits into
release/9.0-staging
from
backport/pr-110828-to-release/9.0-staging
Jan 8, 2025
+409
−154
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading status checks…
…e for the RCW table.
Loading status checks…
1. Register that we've created a managed object as a wrapper for a COM object first (equivalent to ExtObjCxtCache in CoreCLR) 2. Register the NativeObjectWrapper for lifetime management (equivalent to the sync-block interop info in CoreCLR). This ensures that we have the same behavior as CoreCLR.
… the "RCW address -> wrapper" cache. Use a WeakReference as we don't want to keep the wrapper alive any longer with it being in the cache.
…here's only ever one NativeObjectWrapper we try to register, the one that's in the RCW cache
Co-authored-by: Sergio Pedri <sergio0694@live.com>
Tagging subscribers to this area: @dotnet/interop-contrib |
jeffschwMSFT
approved these changes
Jan 7, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm. please get a code review. we will take for consideration in 9.0.x
AaronRobinsonMSFT
approved these changes
Jan 7, 2025
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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 #110828 to release/9.0-staging
/cc @jkoritzinsky
Customer Impact
Microsoft Store app deadlock when running on NativeAOT, hit when registering a COM object in ComWrappers across apartments.
Regression
Regression from CoreCLR, not a regression in NativeAOT
Testing
Added test coverage for cross-thread and cross-apartment scenarios. Verified with a private build for the Microsoft Store.
Risk
Low. We've validated that the tests covering this case pass, all regression tests pass, and the Microsoft Store team has validated the fix. In addition, the change in logic now has the NativeAOT ComWrappers implementation matching the CoreCLR ComWrappers implementation, which gives us more confidence in the NativeAOT ComWrappers implementation.
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.