Better compressor-status termination messages

This commit is contained in:
Michael Snoyman 2014-11-18 18:37:20 +02:00
parent cce7fb3ddf
commit 894f428a5b

View File

@ -94,13 +94,19 @@ createCompressor
createCompressor dirs = do createCompressor dirs = do
baton <- newMVar () baton <- newMVar ()
status <- newIORef "Compressor is idle" status <- newIORef "Compressor is idle"
mask_ $ void $ forkIO $ (`finally` writeIORef status "Compressor thread exited") $ forever $ do mask_ $ void $ forkIO $ (finallyE $ \e -> writeIORef status $ "Compressor thread exited: " ++ tshow e) $ forever $ do
writeIORef status "Waiting for signal to start compressing" writeIORef status "Waiting for signal to start compressing"
takeMVar baton takeMVar baton
writeIORef status "Received signal, traversing directories" writeIORef status "Received signal, traversing directories"
runResourceT $ goDir status (dirRawRoot dirs) runResourceT $ goDir status (dirRawRoot dirs)
return (status, void $ tryPutMVar baton ()) return (status, void $ tryPutMVar baton ())
where where
finallyE f g = mask $ \restore -> do
restore g `catch` \e -> do
() <- f $ Just (e :: SomeException)
() <- throwIO e
return ()
f Nothing
goDir status dir = do goDir status dir = do
writeIORef status $ "Compressing directory: " ++ fpToText dir writeIORef status $ "Compressing directory: " ++ fpToText dir
sourceDirectory dir $$ mapM_C (goFP status) sourceDirectory dir $$ mapM_C (goFP status)