[Pkg-haskell-commits] [SCM] haskell-testpack branch, master, updated. debian/1.0.2-1-4-gb0d6b36
John Goerzen
jgoerzen at complete.org
Fri Apr 23 15:14:32 UTC 2010
The following commit has been merged in the master branch:
commit 84bfdb780cec56d3846b79dc66caea242a23f078
Author: John Goerzen <jgoerzen at complete.org>
Date: Thu Nov 23 09:00:58 2006 +0100
Lock the IO channel during writes
diff --git a/MissingH/ProgressMeter.hs b/MissingH/ProgressMeter.hs
index 909caa5..d916037 100644
--- a/MissingH/ProgressMeter.hs
+++ b/MissingH/ProgressMeter.hs
@@ -84,9 +84,11 @@ setWidth meter w = modifyMVar_ meter (\m -> return $ m {width = w})
This function will output CR, then the meter. -}
displayMeter :: ProgressMeter -> IO ()
-displayMeter r =
- do s <- renderMeter r
+displayMeter r = withMVar r $ \meter ->
+ do s <- renderMeterR meter
putStr ("\r" ++ s)
+ -- By placing this whole thing under withMVar, we can effectively
+ -- lock the IO and prevent IO from stomping on each other.
{- | Clears the meter -- outputs CR, spaces equal to the width - 1,
then another CR. -}
@@ -126,7 +128,10 @@ killAutoDisplayMeter pm t =
{- | Render the current status. -}
renderMeter :: ProgressMeter -> IO String
-renderMeter r = withMVar r $ \meter ->
+renderMeter r = withMVar r $ renderMeterR
+
+renderMeterR :: ProgressMeterR -> IO String
+renerMeterR meter =
do overallpct <- renderpct (masterP meter)
components <- mapM (rendercomponent (renderer meter))
(components meter)
--
haskell-testpack
More information about the Pkg-haskell-commits
mailing list