summaryrefslogtreecommitdiff
path: root/Assistant/TransferQueue.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Assistant/TransferQueue.hs')
-rw-r--r--Assistant/TransferQueue.hs10
1 files changed, 7 insertions, 3 deletions
diff --git a/Assistant/TransferQueue.hs b/Assistant/TransferQueue.hs
index 2b6f1d20e..3ecad600d 100644
--- a/Assistant/TransferQueue.hs
+++ b/Assistant/TransferQueue.hs
@@ -145,11 +145,15 @@ getNextTransfer q dstatus acceptable = atomically $ do
dequeueTransfer :: TransferQueue -> DaemonStatusHandle -> Transfer -> IO Bool
dequeueTransfer q dstatus t = do
ok <- atomically $ do
- (removed, l) <- partition (equivilantTransfer t . fst)
+ (removed, ls) <- partition (equivilantTransfer t . fst)
<$> readTVar (queuelist q)
- void $ writeTVar (queuesize q) (length l)
- void $ writeTVar (queuelist q) l
+ void $ writeTVar (queuesize q) (length ls)
+ void $ writeTVar (queuelist q) ls
+ drain
+ forM_ ls $ unGetTChan (queue q)
return $ not $ null removed
when ok $
notifyTransfer dstatus
return ok
+ where
+ drain = maybe noop (const drain) =<< tryReadTChan (queue q)