send update notificaton when removing a queued transfer

This commit is contained in:
Joey Hess 2012-08-10 16:00:24 -04:00
parent 0d80406b2b
commit 21bd92f077
2 changed files with 20 additions and 14 deletions

View file

@ -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

View file

@ -160,14 +160,16 @@ startTransfer t = liftIO $ putStrLn "start"
cancelTransfer :: Transfer -> Handler ()
cancelTransfer t = do
webapp <- getYesod
{- remove queued transfer -}
void $ liftIO $ dequeueTransfer (transferQueue webapp) t
{- stop running transfer -}
maybe noop (void . liftIO . stop webapp) =<< running webapp
let dstatus = daemonStatus webapp
liftIO $ do
{- remove queued transfer -}
void $ dequeueTransfer (transferQueue webapp) dstatus t
{- stop running transfer -}
maybe noop (stop dstatus) =<< running dstatus
where
running webapp = liftIO $ M.lookup t . currentTransfers
<$> getDaemonStatus (daemonStatus webapp)
stop webapp info = do
running dstatus = M.lookup t . currentTransfers
<$> getDaemonStatus dstatus
stop dstatus info = void $ do
putStrLn $ "stopping transfer " ++ show info
{- When there's a thread associated with the
- transfer, it's killed first, to avoid it
@ -175,7 +177,7 @@ cancelTransfer t = do
- failed when the transfer process is killed. -}
maybe noop killThread $ transferTid info
maybe noop killproc $ transferPid info
removeTransfer (daemonStatus webapp) t
removeTransfer dstatus t
{- In order to stop helper processes like rsync,
- kill the whole process group of the process running the
- transfer. -}