From 92ea222b7aca6a3eb5f04330f0af6755e6e434e3 Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Thu, 24 Sep 2026 16:45:29 +0200 Subject: fix(node): a connection that ends leaves its group's peer set connectionstatechange dropped a closed or failed session from the transport and stopped its tasks, but only close() took it out of the group's peer set, and nothing on that path called it. Every broadcast then went to closed channels, and each reconnect left a dead session held until restart. Co-Authored-By: Claude Opus 5.5 --- packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'packages/meshbay-node/src') diff --git a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py index b877e4d..af90dfc 100644 --- a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py +++ b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py @@ -7347,6 +7347,13 @@ class WebRTCTransport: # two slots the whole time. Closing the viewer, the tab or # the browser all arrive here, so this is the one place # that covers every way of walking away. + # + # And the group's peer set forgets it too, as close() does: + # otherwise every later broadcast to the group is written + # to a closed channel, and every reconnect leaves one more + # dead session held until the node restarts. + if gone._user_id: + gone._unregister_peer() await gone.shutdown_tasks() offer = RTCSessionDescription(sdp=offer_sdp, type="offer") -- cgit v1.2.3