From af87d80ebe4cf46a1aeb0a9421708ea52d09000b Mon Sep 17 00:00:00 2001 From: joe Date: Wed, 25 Jan 2017 20:25:29 -0500 Subject: Immediately forget swarms for which we've never seen peers. --- src/Network/BitTorrent/DHT/ContactInfo.hs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'src/Network') diff --git a/src/Network/BitTorrent/DHT/ContactInfo.hs b/src/Network/BitTorrent/DHT/ContactInfo.hs index 117325fc..ea3b96f0 100644 --- a/src/Network/BitTorrent/DHT/ContactInfo.hs +++ b/src/Network/BitTorrent/DHT/ContactInfo.hs @@ -202,15 +202,15 @@ batchSize = 64 -- | Used in 'get_peers' DHT queries. freshPeers :: Ord a => InfoHash -> Timestamp -> PeerStore a -> ([PeerAddr a], PeerStore a) -freshPeers ih tm (PeerStore m) = (ps, PeerStore m') - where - swarm = fromMaybe (SwarmData PSQ.empty Nothing) $ HM.lookup ih m - ps0 = take batchSize $ unfoldr (incomp minView) (peers swarm) - peers' = case reverse ps0 of - (_,psq):_ -> psq - _ -> peers swarm - ps = L.map (key . fst) ps0 - m' = HM.insert ih swarm { peers = L.foldl' (\q p -> PSQ.insert p tm q) peers' ps } m +freshPeers ih tm (PeerStore m) = fromMaybe ([],PeerStore m) $ do + swarm <- HM.lookup ih m + let ps0 = take batchSize $ unfoldr (incomp minView) (peers swarm) + peers' = case reverse ps0 of + (_,psq):_ -> psq + _ -> peers swarm + ps = L.map (key . fst) ps0 + m' = HM.insert ih swarm { peers = L.foldl' (\q p -> PSQ.insert p tm q) peers' ps } m + return (ps,PeerStore m') incomp :: (x -> Maybe (r,x)) -> x -> Maybe ((r,x),x) incomp f x = do -- cgit v1.2.3