diff options
author | Joey Hess <joey@kitenet.net> | 2012-08-10 18:42:44 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-08-10 18:42:44 -0400 |
commit | 8ba983065324cc850ee25de9a537fb7f29ef4bea (patch) | |
tree | 6a1eeaa6f532670b630c22d425d8e4f63d1127d6 /Assistant/DaemonStatus.hs | |
parent | 21bd92f077c78320bd1ef2637962f53e97af40d1 (diff) |
implement pausing of transfers
A paused transfer's thread keeps running, keeping the slot in use.
This is intentional; pausing a transfer should not let other
queued transfers to run in its place.
Diffstat (limited to 'Assistant/DaemonStatus.hs')
-rw-r--r-- | Assistant/DaemonStatus.hs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/Assistant/DaemonStatus.hs b/Assistant/DaemonStatus.hs index fae51ea61..aa990df34 100644 --- a/Assistant/DaemonStatus.hs +++ b/Assistant/DaemonStatus.hs @@ -183,17 +183,19 @@ adjustTransfersSTM dstatus a = do s <- takeTMVar dstatus putTMVar dstatus $ s { currentTransfers = a (currentTransfers s) } -{- Updates a transfer's info. Preserves any transferTid value, which is not - - written to disk. -} +{- Updates a transfer's info. + - Preserves the transferTid and transferPaused values, + - which are not written to disk. -} updateTransferInfo :: DaemonStatusHandle -> Transfer -> TransferInfo -> IO () updateTransferInfo dstatus t info = notifyTransfer dstatus `after` modifyDaemonStatus_ dstatus go where go s = s { currentTransfers = update (currentTransfers s) } update m = M.insertWith' merge t info m - merge new old = case transferTid old of - Nothing -> new - Just _ -> new { transferTid = transferTid old } + merge new old = new + { transferTid = maybe (transferTid new) Just (transferTid old) + , transferPaused = transferPaused new || transferPaused old + } {- Removes a transfer from the map, and returns its info. -} removeTransfer :: DaemonStatusHandle -> Transfer -> IO (Maybe TransferInfo) |