aboutsummaryrefslogtreecommitdiff
path: root/Assistant/TransferQueue.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Assistant/TransferQueue.hs')
-rw-r--r--Assistant/TransferQueue.hs21
1 files changed, 11 insertions, 10 deletions
diff --git a/Assistant/TransferQueue.hs b/Assistant/TransferQueue.hs
index fbc589673..1679e0daf 100644
--- a/Assistant/TransferQueue.hs
+++ b/Assistant/TransferQueue.hs
@@ -192,16 +192,17 @@ getNextTransfer acceptable = do
sz <- readTVar (queuesize q)
if sz < 1
then retry -- blocks until queuesize changes
- else do
- (r@(t,info):rest) <- readTList (queuelist q)
- void $ modifyTVar' (queuesize q) pred
- setTList (queuelist q) rest
- if acceptable info
- then do
- adjustTransfersSTM dstatus $
- M.insert t info
- return $ Just r
- else return Nothing
+ else readTList (queuelist q) >>= \case
+ (r@(t,info):rest) -> do
+ void $ modifyTVar' (queuesize q) pred
+ setTList (queuelist q) rest
+ if acceptable info
+ then do
+ adjustTransfersSTM dstatus $
+ M.insert t info
+ return $ Just r
+ else return Nothing
+ _ -> error "empty queue claims to be nonempty"
{- Moves transfers matching a condition from the queue, to the
- currentTransfers map. -}