summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-03-10 21:25:37 +0100
committerRoman Smrž <roman.smrz@seznam.cz>2026-03-10 21:25:37 +0100
commit2fba2dd6711bbd87aabaaaf5e4bc572ef98e888f (patch)
treef922e577e452b8f2aed799683531939420edf70e /src
parent519c3d67c2d170cadeea8ef29ba64dc73f4a3f33 (diff)
Avoid resending already sent peer search requests
Diffstat (limited to 'src')
-rw-r--r--src/Erebos/Discovery.hs15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/Erebos/Discovery.hs b/src/Erebos/Discovery.hs
index 7487d7d..43350c5 100644
--- a/src/Erebos/Discovery.hs
+++ b/src/Erebos/Discovery.hs
@@ -622,11 +622,16 @@ discoverySearch server dgst = do
return $ dgst `elem` identityDigests pid
_ -> return False
when (not $ or match) $ do
- modifyServiceGlobalState server (Proxy @DiscoveryService) $ \s -> (, ()) s
- { dgsSearchingFor = S.insert dgst $ dgsSearchingFor s
- }
- forM_ peers $ \peer -> do
- sendToPeer peer $ DiscoverySearch $ Right dgst
+ alreadySearching <- modifyServiceGlobalState server (Proxy @DiscoveryService) $ \s ->
+ let alreadySearching = S.member dgst $ dgsSearchingFor s
+ in ( if alreadySearching then s else s
+ { dgsSearchingFor = S.insert dgst $ dgsSearchingFor s
+ }
+ , alreadySearching
+ )
+ when (not alreadySearching) $ do
+ forM_ peers $ \peer -> do
+ sendToPeer peer $ DiscoverySearch $ Right dgst
data TunnelAddress = TunnelAddress