[release/6.0] Fix race condition in InteropSyncBlock for ComWrappers map. #65215
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 #65214 to release/6.0
/cc @dotnet/interop-contrib
Customer Impact
There is a race condition for all
ComWrappersscenarios involving creation of a CCW. It is possible that the initial creation of the CCW map on one thread is interpreted as a fully initialized state on another, but this is not the case. A critical section also needed to be initialized but is used prior to that initialization routine being run on the first thread.This issue was observed by a first-party and reported directly to the interop team.
Testing
Since this is a race condition, testing is difficult. Auditing of the code paths for critical section initialization was performed and indicated the issue was possible and confirmed with the state of a DMP file.
Risk
Minimal. The race condition has been removed and the new initialization location is a pay for play location which means performance impact is negligible relative to the creation of the Interop data structure.