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.
It turns out that the original code was relying on V8 specific scoping behavior. The value of the argument
initialSyncDepthwas being set to1even when the other arguments insiderunBatchwere being evaluated and eventually callingrunBatchagain. So if I were do make a rough trace:<some function>runBatchwithinitialSyncDepthset to1firstBatchargument ofrunBatch<some code>runBatchwith noinitialSyncDepthset^ here is where the difference manifests, in Firefox the value of
initialSyncDepthas seen by the nested call torunBatchwill beundefined. However in V8 it will be1as the call torunBatchin 2 is still in progress technically.This difference would lead to desync between the server side and the frontend JS code, which manifests as "spinning" in a tight loop as the frontend is trying to fetch an event that doesn't exist.
Properly fixes #54 and maybe also #64, while also retaining V8 compatibility as far as I can tell.
I tracked this down by running the same JSaddle program in both Firefox and ungoogled-chromium and stepping both in tandem with the respective debuggers until i found a difference.