Ticket #352 (closed bug: Fixed)

Opened 8 years ago

Last modified 43 years ago

Possible error using concurrency

Reported by: nobody Owned by: nobody
Priority: normal Milestone:
Component: libraries (other) Version: 6.4
Keywords: Cc:
Operating System: Architecture:
Type of failure: Difficulty:
Test Case: Blocked By:
Blocking: Related Tickets:

Description

{- 
     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 ()

   

Change History

Changed 8 years ago by simonmar

  • status changed from assigned to closed
Logged In: YES 
user_id=48280

Fixed the strange error message on Windows.

On Unix, the behaviour is correct: your main thread is
waiting for a condition that never happens.
Note: See TracTickets for help on using tickets.