summaryrefslogtreecommitdiff
path: root/dht/src/Network/Lossless.hs
diff options
context:
space:
mode:
Diffstat (limited to 'dht/src/Network/Lossless.hs')
-rw-r--r--dht/src/Network/Lossless.hs13
1 files changed, 7 insertions, 6 deletions
diff --git a/dht/src/Network/Lossless.hs b/dht/src/Network/Lossless.hs
index 41203ca5..7ccceec1 100644
--- a/dht/src/Network/Lossless.hs
+++ b/dht/src/Network/Lossless.hs
@@ -61,7 +61,9 @@ lossless lbl isLossless encode saddr udp = do
61 rloop <- forkIO $ do 61 rloop <- forkIO $ do
62 -- This thread enqueues inbound packets or writes them to the oob 62 -- This thread enqueues inbound packets or writes them to the oob
63 -- channel. 63 -- channel.
64 fix $ \loop -> join $ atomically $ awaitMessage udp $ \m -> do 64 fix $ \loop -> do
65 (m,io) <- atomically $ awaitMessage udp
66 io
65 m' <- case m of Terminated -> return Nothing 67 m' <- case m of Terminated -> return Nothing
66 ParseError e -> return $ Just (Left e) 68 ParseError e -> return $ Just (Left e)
67 Arrival a x -> Just . Right <$> isLossless x a 69 Arrival a x -> Just . Right <$> isLossless x a
@@ -87,15 +89,14 @@ lossless lbl isLossless encode saddr udp = do
87 -- we will use this STM action stop it from waiting on the oob TChan. 89 -- we will use this STM action stop it from waiting on the oob TChan.
88 -- XXX: This shouldn't be neccessary and might be costly. 90 -- XXX: This shouldn't be neccessary and might be costly.
89 let tr = Transport 91 let tr = Transport
90 { awaitMessage = \kont -> 92 { awaitMessage =
91 orElse 93 orElse
92 (do x <- readTChan oob `orElse` join (readTVar term) 94 (do x <- readTChan oob `orElse` join (readTVar term)
93 return $ kont $! x) 95 return (x, return ()))
94 (do x <- PB.awaitReadyPacket pb 96 (do x <- PB.awaitReadyPacket pb
95 report <- pbReport "dequeued" pb 97 report <- pbReport "dequeued" pb
96 return $ do 98 return $ (,) (uncurry (flip Arrival) x) $ do
97 atomically $ writeTChan oob (ParseError report) 99 atomically $ writeTChan oob (ParseError report))
98 kont $! uncurry (flip Arrival) x)
99 , sendMessage = \a' x' -> do 100 , sendMessage = \a' x' -> do
100 seqno <- atomically $ do 101 seqno <- atomically $ do
101 seqno <- PB.nextToSendSequenceNumber pb 102 seqno <- PB.nextToSendSequenceNumber pb