From 8b02ae3a8d64dedb198284ac743378dd38ca31c4 Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Tue, 11 Aug 2026 15:45:47 +0200 Subject: fix(node): iterate dict copies in WebRTC peer broadcast and close_all Concurrent peer disconnects could mutate _peers/_sessions during iteration, causing RuntimeError: dictionary changed size during iteration. Co-Authored-By: Claude Opus 4.6 --- packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'packages/meshbay-node') 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 07ceed3..6231310 100644 --- a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py +++ b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py @@ -288,7 +288,7 @@ class WebRTCPeerSession: "thread_id": msg.get("thread_id"), "timestamp": __import__("time").time(), } - for uid, session in peers.items(): + for uid, session in list(peers.items()): if uid != self._user_id and session is not self: try: session._send(broadcast) @@ -491,7 +491,7 @@ class WebRTCTransport: await session.close() async def close_all(self) -> None: - for session in self._sessions.values(): + for session in list(self._sessions.values()): await session.close() self._sessions.clear() -- cgit v1.2.3