From 2ced7fa5b110d19f0e6cc21968822f4ccf880c13 Mon Sep 17 00:00:00 2001 From: joe Date: Mon, 23 Jan 2017 23:11:40 -0500 Subject: Fixed table inadvertent "retry" in table insertion. --- src/Network/BitTorrent/DHT/Routing.hs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/Network/BitTorrent/DHT/Routing.hs') diff --git a/src/Network/BitTorrent/DHT/Routing.hs b/src/Network/BitTorrent/DHT/Routing.hs index 8a6849a1..d64e415e 100644 --- a/src/Network/BitTorrent/DHT/Routing.hs +++ b/src/Network/BitTorrent/DHT/Routing.hs @@ -529,11 +529,11 @@ splitTip nid n i bucket -- k nodes in them. Which subtrees I mean is illustrated in Fig 1. of Kademlia -- paper. The rule requiring additional splits is in section 2.4. modifyBucket - :: forall f ip xs. (Alternative f, Eq ip) => - NodeId -> (Bucket ip -> f (xs, Bucket ip)) -> Table ip -> f (xs,Table ip) + :: forall ip xs. (Eq ip) => + NodeId -> (Bucket ip -> Maybe (xs, Bucket ip)) -> Table ip -> Maybe (xs,Table ip) modifyBucket nodeId f = go (0 :: BitIx) where - go :: BitIx -> Table ip -> f (xs, Table ip) + go :: BitIx -> Table ip -> Maybe (xs, Table ip) go i (Zero table bucket) | testIdBit nodeId i = second (Zero table) <$> f bucket | otherwise = second (`Zero` bucket) <$> go (succ i) table @@ -562,8 +562,8 @@ data CheckPing ip = CheckPing [NodeInfo ip] -- | Atomic 'Table' update -insert :: (Alternative m, Eq ip) => Timestamp -> Event ip -> Table ip -> m ([CheckPing ip], Table ip) -insert tm event = modifyBucket (eventId event) (insertBucket tm event) +insert :: (Eq ip, Applicative m) => Timestamp -> Event ip -> Table ip -> m ([CheckPing ip], Table ip) +insert tm event tbl = pure $ fromMaybe ([],tbl) $ modifyBucket (eventId event) (insertBucket tm event) tbl {----------------------------------------------------------------------- -- cgit v1.2.3