Fix default variables concurrency issues #6996
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.
Description
This PR fixes to aim rare concurrency issues that can occur with default variables. Specifically, this may occur when two (or more) parts of a script operating on different threads (e.g. a script has an async event) try to work with default variables at the same time. What occurs is that not all
push
calls are successful (e.g. one overrides another), leading to thepop
calls causing NoSuchElementExceptions.I have chosen to use synchronization blocks over implementations such as ConcurrentLinkedQueue. I found performance of the synchronization blocks to be better, and this is not a common occurrence that would lead to threads waiting for access.
Target Minecraft Versions: any
Requirements: none
Related Issues: Reported through Discord