Skip to content

Fix Incorrect Variable Change Queue Processing#8182

Merged
Absolutionism merged 1 commit intodev/patchfrom
patch/variable-change-queue-processing
Sep 17, 2025
Merged

Fix Incorrect Variable Change Queue Processing#8182
Absolutionism merged 1 commit intodev/patchfrom
patch/variable-change-queue-processing

Conversation

@APickledWalrus
Copy link
Member

Problem

When variables are being changed across multiple threads, a lock is used to prevent concurrent modification. If a thread is unable to acquire the lock, it instead pushes its changes to a queue to avoid blocking the thread. This queue is processed the next time a thread is able to acquire the lock and make changes.
However, the process in which changes are applied has a dangerous flaw. Changes are supposed to be processed oldest to newest so that older changes do not override newer ones. The queue itself process changes in order, but the specific variable update that triggered the queue processing is processed before. This is a major mistake that can lead to the specific variable update being overridden.
This issue was discovered after a report on Discord of seemingly improper variable behavior. The user had some sort of async processes that were leading to the change queue being used. Consider the following scenario:

set {my_var::*} to 10 and 20

Variable's change implementation for SET takes the following action:

  1. It deletes {my_var::*}
  2. It sets {my_var::*} to 10 and 20

The problem with the current implementation is that it's possible for action 1 to be delayed (pushed to the change queue) while for action 2 a lock is able to be acquired. This results in action 2 occurring and then action 1 occurring, leading to the variable being deleted instead of set.

Solution

The logic has been updated so that the change queue is processed (if changes are available) before the specific variable change.

Testing Completed

I had the user that reported this issue test the patch. They confirmed the issue was resolved.

Supporting Information


Completes: none
Related: Reported on Discord

@APickledWalrus APickledWalrus requested review from a team as code owners September 10, 2025 02:56
@APickledWalrus APickledWalrus removed the request for review from a team September 10, 2025 02:56
@APickledWalrus APickledWalrus added the bug An issue that needs to be fixed. Alternatively, a PR fixing an issue. label Sep 10, 2025
@APickledWalrus APickledWalrus requested review from Pesekjak and UnderscoreTud and removed request for a team September 10, 2025 02:56
@skriptlang-automation skriptlang-automation bot added the needs reviews A PR that needs additional reviews label Sep 10, 2025
@skriptlang-automation skriptlang-automation bot added patch-ready A PR/issue that has been approved and is ready to be merged/closed for the next patch version. and removed needs reviews A PR that needs additional reviews labels Sep 10, 2025
@Absolutionism Absolutionism merged commit 78fafa1 into dev/patch Sep 17, 2025
5 checks passed
@skriptlang-automation skriptlang-automation bot added completed The issue has been fully resolved and the change will be in the next Skript update. and removed patch-ready A PR/issue that has been approved and is ready to be merged/closed for the next patch version. labels Sep 17, 2025
@Absolutionism Absolutionism moved this to Done - Awaiting Release in 2.13 Releases Sep 17, 2025
sovdeeth added a commit that referenced this pull request Oct 1, 2025
* Swap reset and delete errors in EffChange (#8177)

swap reset and delete errors

* Fix improper grammar in update block syntax (#8072)

Co-authored-by: sovdee <10354869+sovdeeth@users.noreply.github.com>

* Fix Incorrect Variable Change Queue Processing (#8182)

Fix incorrect change processing order

* Change registerExpression() parameter name (#8180)

change parameter name

* Move EvtRealTime to main thread (#8185)

* Fix type-aware function parsing for functions with only optional arguments (#8189)

Account for functions with all optional parameters

* Properly parse exprsecs in function calls (#8199)

modify section context when parsing functions

* add runtime error when EffSort aborts due to null values.

* catch runtime errors
@sovdeeth sovdeeth moved this from Done - Awaiting Release to Done - Released in 2.13 Releases Oct 15, 2025
erenkarakal pushed a commit to erenkarakal/Skript that referenced this pull request Nov 26, 2025
)

* Swap reset and delete errors in EffChange (SkriptLang#8177)

swap reset and delete errors

* Fix improper grammar in update block syntax (SkriptLang#8072)

Co-authored-by: sovdee <10354869+sovdeeth@users.noreply.github.com>

* Fix Incorrect Variable Change Queue Processing (SkriptLang#8182)

Fix incorrect change processing order

* Change registerExpression() parameter name (SkriptLang#8180)

change parameter name

* Move EvtRealTime to main thread (SkriptLang#8185)

* Fix type-aware function parsing for functions with only optional arguments (SkriptLang#8189)

Account for functions with all optional parameters

* Properly parse exprsecs in function calls (SkriptLang#8199)

modify section context when parsing functions

* add runtime error when EffSort aborts due to null values.

* catch runtime errors
erenkarakal pushed a commit to erenkarakal/Skript that referenced this pull request Nov 26, 2025
)

* Swap reset and delete errors in EffChange (SkriptLang#8177)

swap reset and delete errors

* Fix improper grammar in update block syntax (SkriptLang#8072)

Co-authored-by: sovdee <10354869+sovdeeth@users.noreply.github.com>

* Fix Incorrect Variable Change Queue Processing (SkriptLang#8182)

Fix incorrect change processing order

* Change registerExpression() parameter name (SkriptLang#8180)

change parameter name

* Move EvtRealTime to main thread (SkriptLang#8185)

* Fix type-aware function parsing for functions with only optional arguments (SkriptLang#8189)

Account for functions with all optional parameters

* Properly parse exprsecs in function calls (SkriptLang#8199)

modify section context when parsing functions

* add runtime error when EffSort aborts due to null values.

* catch runtime errors
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug An issue that needs to be fixed. Alternatively, a PR fixing an issue. completed The issue has been fully resolved and the change will be in the next Skript update.

Projects

No open projects
Status: Done - Released

Development

Successfully merging this pull request may close these issues.

4 participants

Comments