summaryrefslogtreecommitdiff
path: root/kad/src/Network/Kademlia/Search.hs
diff options
context:
space:
mode:
Diffstat (limited to 'kad/src/Network/Kademlia/Search.hs')
-rw-r--r--kad/src/Network/Kademlia/Search.hs9
1 files changed, 6 insertions, 3 deletions
diff --git a/kad/src/Network/Kademlia/Search.hs b/kad/src/Network/Kademlia/Search.hs
index 5b60c303..856a7cfc 100644
--- a/kad/src/Network/Kademlia/Search.hs
+++ b/kad/src/Network/Kademlia/Search.hs
@@ -194,12 +194,15 @@ search ::
194 , PSQKey nid 194 , PSQKey nid
195 , PSQKey ni 195 , PSQKey ni
196 , Show nid 196 , Show nid
197 ) => Search nid addr tok ni r -> R.BucketList ni -> nid -> (r -> STM Bool) -> IO (SearchState nid addr tok ni r) 197 ) => Search nid addr tok ni r -> R.BucketList ni -> nid -> (r -> STM Bool) -> IO (SearchState nid addr tok ni r, ThreadId)
198search sch buckets target result = do 198search sch buckets target result = do
199 let ns = R.kclosest (searchSpace sch) (searchK sch) target buckets 199 let ns = R.kclosest (searchSpace sch) (searchK sch) target buckets
200 st <- atomically $ newSearch sch target ns 200 st <- atomically $ newSearch sch target ns
201 t <- forkIO $ searchLoop sch target result st 201 v <- newTVarIO False
202 return st 202 t <- forkIO $ atomically (check =<< readTVar v) >> searchLoop sch target result st
203 labelThread t ("search.pending." ++ show target)
204 atomically $ writeTVar v True
205 return (st,t)
203 206
204searchLoop :: ( Ord addr, Ord nid, Ord ni, Show nid, Hashable nid, Hashable ni ) 207searchLoop :: ( Ord addr, Ord nid, Ord ni, Show nid, Hashable nid, Hashable ni )
205 => Search nid addr tok ni r -- ^ Query and distance methods. 208 => Search nid addr tok ni r -- ^ Query and distance methods.