[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