Skip to content

VAPI-3542 fix(signaling): disable auto-reconnect before closing on disconnect - #13

Merged
smoghe-bw merged 1 commit into
mainfrom
fix/disconnect-disables-auto-reconnect
Aug 4, 2026
Merged

VAPI-3542 fix(signaling): disable auto-reconnect before closing on disconnect#13
smoghe-bw merged 1 commit into
mainfrom
fix/disconnect-disables-auto-reconnect

Conversation

@smoghe-bw

Copy link
Copy Markdown
Contributor

The rpc-websockets client is constructed with reconnect: true and max_reconnects: 0 (unlimited), and the library only skips reconnecting when the close code is exactly 1000. Any other code reconnects forever — including 1001/StatusGoingAway, which pv-gateway sends on every close where it wants the device to come back (heartbeat timeout, and Handle's teardown backstop).

_disconnect() removed all listeners and closed the socket but never disabled reconnect, so an explicit disconnect could leave a reconnect loop running behind a client that no longer has an "open" handler. The reconnected socket therefore never calls setMediaPreferences, never creates peer connections and never answers the heartbeat — an inert connection on the gateway with no liveness check on either side, which accumulates for as long as the process lives.

Reconnect stays enabled for the lifetime of a live connection; it is only disabled in _disconnect(), where the caller has asked to tear this client down for good. Failing to disable it no longer prevents the close.

The rpc-websockets client is constructed with `reconnect: true` and
`max_reconnects: 0` (unlimited), and the library only skips reconnecting
when the close code is exactly 1000. Any other code reconnects forever —
including 1001/StatusGoingAway, which pv-gateway sends on every close
where it wants the device to come back (heartbeat timeout, and Handle's
teardown backstop).

_disconnect() removed all listeners and closed the socket but never
disabled reconnect, so an explicit disconnect could leave a reconnect
loop running behind a client that no longer has an "open" handler. The
reconnected socket therefore never calls setMediaPreferences, never
creates peer connections and never answers the heartbeat — an inert
connection on the gateway with no liveness check on either side, which
accumulates for as long as the process lives.

Reconnect stays enabled for the lifetime of a live connection; it is only
disabled in _disconnect(), where the caller has asked to tear this client
down for good. Failing to disable it no longer prevents the close.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@smoghe-bw
smoghe-bw requested review from a team as code owners August 4, 2026 14:59
@bwappsec

bwappsec commented Aug 4, 2026

Copy link
Copy Markdown

Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
Open Source Security 0 0 0 0 0 issues
Licenses 0 0 0 0 0 issues
Code Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@smoghe-bw smoghe-bw changed the title fix(signaling): disable auto-reconnect before closing on disconnect VAPI-3542 fix(signaling): disable auto-reconnect before closing on disconnect Aug 4, 2026
@smoghe-bw
smoghe-bw merged commit 6e60f01 into main Aug 4, 2026
5 checks passed
@smoghe-bw
smoghe-bw deleted the fix/disconnect-disables-auto-reconnect branch August 4, 2026 15:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants