|
[ ghc-Bugs-1190056 ] Infinite loops can hang Concurrent Haskell: msg#00126lang.haskell.glasgow.bugs
Bugs item #1190056, was opened at 2005-04-26 07:35 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=108032&aid=1190056&group_id=8032 Category: Compiler Group: None Status: Open Resolution: None Priority: 2 Submitted By: Simon Peyton Jones (simonpj) Assigned to: Nobody/Anonymous (nobody) Summary: Infinite loops can hang Concurrent Haskell Initial Comment: An infinite loop that does not allocate can hang Concurrent Haskell, becuase no thread switching occurs. Demo code below (from Koen Claessen). Bites occasionally, but not often. Simon module Main where import Control.Concurrent ( forkIO , threadDelay , killThread , newEmptyMVar , takeMVar , putMVar ) import Data.IORef import IO( hFlush, stdout ) timeout :: Int -> a -> IO (Maybe a) timeout n x = do put "Race starts ..." resV <- newEmptyMVar pidV <- newEmptyMVar let waitAndFail = do put "Waiting ..." threadDelay n put "Done waiting!" putMVar resV Nothing eval = do put "Evaluating ..." x `seq` put "Done!" putMVar resV (Just x) -- used "mfix" here before but got non-termination problems -- (not sure they had anything to do with mfix) pid1 <- forkIO $ do pid2 <- takeMVar pidV eval killThread pid2 pid2 <- forkIO $ do waitAndFail killThread pid1 putMVar pidV pid2 put "Blocking ..." takeMVar resV put s = do putStrLn s hFlush stdout main = do timeout 1 (sum (repeat 1)) <<< The above program produces the following (expected result): >>> Race starts ... Blocking ... Evaluating ... Waiting ... Done waiting! <<< If you replace 'sum (repeat 1)' by 'last (repeat 1)' the program hangs. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=108032&aid=1190056&group_id=8032
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | [ ghc-Bugs-1188155 ] Bootstrapping fails at System/CPUTime_hsc.c, SourceForge.net |
|---|---|
| Next by Date: | [ ghc-Bugs-1189354 ] GHC dies silently with faulty preprocessor, SourceForge.net |
| Previous by Thread: | [ ghc-Bugs-1189354 ] GHC dies silently with faulty preprocessor, SourceForge.net |
| Next by Thread: | Build problem from CVS ...?, David Duke |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |