This repository was archived by the owner on Jun 16, 2026. It is now read-only.
fix(utils): handle Web Locks API tab backgrounding in SSE multiplexer#9252
Open
tmdeveloper007 wants to merge 1 commit into
Open
fix(utils): handle Web Locks API tab backgrounding in SSE multiplexer#9252tmdeveloper007 wants to merge 1 commit into
tmdeveloper007 wants to merge 1 commit into
Conversation
Contributor
|
@tmdeveloper007 is attempting to deploy a commit to the sandeepvashishtha's projects Team on Vercel. A member of the Team first needs to authorize it. |
There was a problem hiding this comment.
Our agent can fix these. Install it.
Gates Passed
4 Quality Gates Passed
Quality Gate Profile: Clean Code Collective
Install CodeScene MCP: safeguard and uplift AI-generated code. Catch issues early with our IDE extension and CLI tool.
Contributor
Author
|
@SandeepVashishtha Ready for review — PR #9252: fix SSE multiplexer Web Locks promise hanging when tab is backgrounded by adding visibilitychange listener and proper lock release. |
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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
The
SSEClientinsrc/utils/sseMultiplexer.jsused the Web Locks API for leader election. When a browser tab was backgrounded or suspended, the browser automatically released the Web Lock — but the internalreleaseLockPromisewas never called, causing the promise to hang indefinitely and leaving the tab in an inconsistentisLeader = falsestate.Changes
visibilitychangelistener inside the Web Locks request callback to detect when the tab moves to backgrounddocument.visibilityState === "hidden", the fix callsstopHeartbeatChecks(), setsisLeader = false, resolvesreleaseLockPromise, and transitions to localStorage-based election so another tab can claim leadershipreleaseLockPromiseto also remove thevisibilitychangelistener on resolve, preventing memory leaksImpact
Multi-tab SSE scenarios are now stable: backgrounded tabs properly release leadership, preventing heartbeat failures, duplicate SSE connections, and inconsistent subscriber state.
Closes #9247.