Fix shared singleton mutation in OneTime bindable member Get methods#85
Open
VPDPersonal wants to merge 1 commit into
Open
Fix shared singleton mutation in OneTime bindable member Get methods#85VPDPersonal wants to merge 1 commit into
VPDPersonal wants to merge 1 commit into
Conversation
… Get methods Replace the per-type static singleton pattern with fresh instance creation in Get(). The singleton's Value was mutated before being returned, so any caller that held a reference across multiple Get() calls would observe stale or incorrect values. Since OneTime bindings fire exactly once per bind cycle the allocation cost is negligible, and the hazard is completely removed.
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
OneTimeBindableMember<T>.Get(),OneTimeStructBindableMember<T>.Get(), andOneTimeEnumBindableMember<T>.Get()all mutated a shared static_instanceand returned it. Any caller that retained the reference across twoGet()calls on the same type would silently observe the second value instead of the first.Notes for review
The
Valueproperty onOneTimeStructBindableMember<T, TBoxed>was changed from{ get; private protected set; }to{ get; }(init-only via constructor). This is a tighter contract that prevents any future accidental mutation from derived types.No generated code changes are needed — the generator emits
SomeType.Get(memberName)whose result is consumed immediately, so the fix is transparent.Linked issues
N/A