summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-02-26 21:17:32 +0100
committerRoman Smrž <roman.smrz@seznam.cz>2026-02-28 18:51:19 +0100
commit8a3509cad6ce14e149cec4dcbc1eeafb531c5cd5 (patch)
tree5e6bccda1ffe0db50cfe7bbbf34e06b300d2e5c1 /src
parent7126124e6ab2f4c6882b4f5116d3879112699405 (diff)
Discovery: clear peer map from dropped peers
Diffstat (limited to 'src')
-rw-r--r--src/Erebos/Discovery.hs13
-rw-r--r--src/Erebos/Network.hs1
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