diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-03-10 21:25:37 +0100 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-03-10 21:25:37 +0100 |
| commit | 2fba2dd6711bbd87aabaaaf5e4bc572ef98e888f (patch) | |
| tree | f922e577e452b8f2aed799683531939420edf70e | |
| parent | 519c3d67c2d170cadeea8ef29ba64dc73f4a3f33 (diff) | |
Avoid resending already sent peer search requests
| -rw-r--r-- | src/Erebos/Discovery.hs | 15 |
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 |