Browse Source

Merge pull request #310 from exo-explore/udp_discovry_peer_race_condition

race condition in on_listen_message for udp discovery fixes #308
Alex Cheema 9 months ago
parent
commit
eade4fb62d
1 changed files with 2 additions and 3 deletions
  1. 2 3
      exo/networking/udp/udp_discovery.py

+ 2 - 3
exo/networking/udp/udp_discovery.py

@@ -79,8 +79,7 @@ class UDPDiscovery(Discovery):
     return [peer_handle for peer_handle, _, _, _ in self.known_peers.values()]
 
   async def task_broadcast_presence(self):
-    if DEBUG_DISCOVERY >= 2:
-      print("Starting task_broadcast_presence...")
+    if DEBUG_DISCOVERY >= 2: print("Starting task_broadcast_presence...")
 
     while True:
       # Explicitly broadcasting on all assigned ips since broadcasting on `0.0.0.0` on MacOS does not broadcast over
@@ -159,7 +158,7 @@ class UDPDiscovery(Discovery):
           if DEBUG >= 1: print(f"Peer {peer_id} at {peer_host}:{peer_port} is not healthy. Removing.")
           if peer_id in self.known_peers: del self.known_peers[peer_id]
           return
-        self.known_peers[peer_id] = (self.known_peers[peer_id][0], self.known_peers[peer_id][1], time.time(), peer_prio)
+        if peer_id in self.known_peers: self.known_peers[peer_id] = (self.known_peers[peer_id][0], self.known_peers[peer_id][1], time.time(), peer_prio)
 
   async def task_listen_for_peers(self):
     await asyncio.get_event_loop().create_datagram_endpoint(lambda: ListenProtocol(self.on_listen_message),