fix: Use mutex when modifying state using snap_setState
#3742
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.
Adds a mutex per Snap that can be used to make usage of
snap_setStatein parallel more safe. The assumption was that this was already safe since getting and setting the state nearly always is a synchronous task. However, in practice, at least on mobile, this assumption has been proven false. This change may include a performance penalty, but it is important forsnap_setStateto be safe to use without data loss.Note
Wraps snap_setState in a per-Snap mutex to safely handle parallel state updates and adds tests; updates deps and minor coverage thresholds.
snap_setStatelogic in a per-Snapasync-mutex(getMutex,mutexesmap,runExclusive) to serialize concurrent updates.SnapIdfor mutex keying.createDeferredPromise.async-mutex.Written by Cursor Bugbot for commit 358aad0. This will update automatically on new commits. Configure here.