summaryrefslogtreecommitdiff
path: root/Assistant/Threads/Transferrer.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-07-28 18:47:24 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-07-28 18:47:24 -0400
commite31277d38aa5d9b07395d05a6f1646b5eb3d48c2 (patch)
tree290f14867fc066daf2e84f2644bccc2356da09df /Assistant/Threads/Transferrer.hs
parent3cc18857936e5a09e033439971dc9c43e6ccbaa2 (diff)
send notifications when the TransferQueue is changed
The fun part was making it move things from TransferQueue to currentTransfers entirely atomically. Which will avoid inconsistent display if the WebApp renders the current status at just the wrong time. STM to the rescue!
Diffstat (limited to 'Assistant/Threads/Transferrer.hs')
-rw-r--r--Assistant/Threads/Transferrer.hs10
1 files changed, 8 insertions, 2 deletions
diff --git a/Assistant/Threads/Transferrer.hs b/Assistant/Threads/Transferrer.hs
index 30802f742..f011ff036 100644
--- a/Assistant/Threads/Transferrer.hs
+++ b/Assistant/Threads/Transferrer.hs
@@ -34,12 +34,18 @@ transfererThread :: ThreadState -> DaemonStatusHandle -> TransferQueue -> Transf
transfererThread st dstatus transferqueue slots = go
where
go = do
- (t, info) <- getNextTransfer transferqueue
+ (t, info) <- getNextTransfer transferqueue dstatus
ifM (runThreadState st $ shouldTransfer dstatus t info)
( do
debug thisThread [ "Transferring:" , show t ]
+ notifyDaemonStatusChange dstatus
transferThread st dstatus slots t info
- , debug thisThread [ "Skipping unnecessary transfer:" , show t ]
+ , do
+ debug thisThread [ "Skipping unnecessary transfer:" , show t ]
+ -- getNextTransfer added t to the
+ -- daemonstatus's transfer map.
+ void $ removeTransfer dstatus t
+ notifyDaemonStatusChange dstatus
)
go