Add memory barrier for bridge context #99
Merged
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.
mssf IFabricAsyncOperationContext implementation BridgeContext3 requires memory barrier to synchronize the operation complete status and the ctx content.
For example, a problematic way to use SF COM API:
Caller of SF COM API can call Begin operation, poll on ctx's status in a loop until complete using IsCompleted() api , and End operation without barriers. Without this change, this might cause the caller to forever be looping and polling the bool completed status. This is because the background thread set the status and result content in some memory location, but the memory location is not synchronized to the caller's thread.
There might be other ways including using callbacks that can result the same error behavior.
This PR fixes this to add proper memory barrier to ensure that completed status and the async operation result are visible by the callers' threads.