diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-02-26 21:17:32 +0100 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-02-28 18:51:19 +0100 |
| commit | 8a3509cad6ce14e149cec4dcbc1eeafb531c5cd5 (patch) | |
| tree | 5e6bccda1ffe0db50cfe7bbbf34e06b300d2e5c1 /src/Erebos | |
| parent | 7126124e6ab2f4c6882b4f5116d3879112699405 (diff) | |
Discovery: clear peer map from dropped peers
Diffstat (limited to 'src/Erebos')
| -rw-r--r-- | src/Erebos/Discovery.hs | 13 | ||||
| -rw-r--r-- | src/Erebos/Network.hs | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/Erebos/Discovery.hs b/src/Erebos/Discovery.hs index 16b67e6..7487d7d 100644 --- a/src/Erebos/Discovery.hs +++ b/src/Erebos/Discovery.hs @@ -553,6 +553,19 @@ instance Service DiscoveryService where forM_ searchingFor $ \dgst -> do sendToPeer peer $ DiscoverySearch (Right dgst) + serviceUpdatedPeer = do + pid <- asks svcPeerIdentity + peer <- asks svcPeer + isPeerDropped peer >>= \case + True -> do + peers <- dgsPeers <$> svcGetGlobal + let peers' = M.filter ((Just peer /=) . dpPeer) peers + svcModifyGlobal $ \s -> s { dgsPeers = peers' } + debugLog $ "dropped peer " <> show [ refDigest $ storedRef $ idData pid, refDigest $ storedRef $ idExtData pid ] <> + ", map size " <> show (M.size peers) <> " -> " <> show (M.size peers') + False -> do + debugLog $ "updated peer " <> show [ refDigest $ storedRef $ idData pid, refDigest $ storedRef $ idExtData pid ] + #ifdef ENABLE_ICE_SUPPORT serviceStopServer _ _ _ pstates = do forM_ pstates $ \( _, DiscoveryPeerState {..} ) -> do diff --git a/src/Erebos/Network.hs b/src/Erebos/Network.hs index ebecbc0..518e992 100644 --- a/src/Erebos/Network.hs +++ b/src/Erebos/Network.hs @@ -908,6 +908,7 @@ dropPeerInner peer pvalue = do PeerConnected conn -> do connClose conn writeTChan (serverChanPeer $ peerServer peer) peer + notifyServicesOfPeer False peer _ -> return () writeTVar (peerState peer) PeerDropped return $ M.delete (peerAddress peer) pvalue |