diff options
Diffstat (limited to 'Assistant/TransferQueue.hs')
-rw-r--r-- | Assistant/TransferQueue.hs | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/Assistant/TransferQueue.hs b/Assistant/TransferQueue.hs index 865a82915..24987bfa6 100644 --- a/Assistant/TransferQueue.hs +++ b/Assistant/TransferQueue.hs @@ -136,9 +136,13 @@ getNextTransfer q dstatus acceptable = atomically $ do {- Removes a transfer from the queue, if present, and returns True if it - was present. -} -dequeueTransfer :: TransferQueue -> Transfer -> IO Bool -dequeueTransfer q t = atomically $ do - (l, removed) <- partition (\i -> fst i /= t) <$> readTVar (queuelist q) - void $ writeTVar (queuesize q) (length l) - void $ writeTVar (queuelist q) l - return $ not $ null removed +dequeueTransfer :: TransferQueue -> DaemonStatusHandle -> Transfer -> IO Bool +dequeueTransfer q dstatus t = do + ok <- atomically $ do + (l, removed) <- partition (\i -> fst i /= t) <$> readTVar (queuelist q) + void $ writeTVar (queuesize q) (length l) + void $ writeTVar (queuelist q) l + return $ not $ null removed + when ok $ + notifyTransfer dstatus + return ok |