diff options
Diffstat (limited to 'dht/src/Network/Lossless.hs')
-rw-r--r-- | dht/src/Network/Lossless.hs | 13 |
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 |