Possible error using concurrency
{-
Error description:
In windows xp sp2 with ghc-6-4, GHCi ends with
"internal error: deadlock: main thread blocked in a
strange way"
In RedHat Linux, it just blocks.
A probably cause, it's that the scheduler hasn't yet
run oneThread
before the second putTMVAr, because no memory
allocation has been
requested.
Try on the calls forkIO and runInUnboundThread.
contact info: leonelfl@yahoo.com
-}
import Control.Concurrent
import Control.Concurrent.STM
import Control.Concurrent.STM.TMVar
main = do
stopFlag <- atomically (do t <- newEmptyTMVar;
return t)
threadDelay 100001
--t <- forkIO $ oneThread stopFlag -- this line would
work fine...
-- but the following one doesn't work.
runInUnboundThread $ oneThread stopFlag
threadDelay 100002
atomically ( putTMVar stopFlag True )
threadDelay 500003
atomically ( putTMVar stopFlag False )
return ()
oneThread stopFlag = do
go <- atomically ( takeTMVar stopFlag )
if go then do putStrLn "-"
oneThread stopFlag
else return ()
Trac metadata
| Trac field | Value |
|---|---|
| Version | 6.4 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | ResolvedFixed |
| Component | libraries (other) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |