#637: Ctrl-Break handler doesn't work in forked threads in "-threaded" RTS
--------------------------------+-------------------------------------------
  Reporter:  [EMAIL PROTECTED]  |          Owner:         
      Type:  bug                |         Status:  new    
  Priority:  normal             |      Milestone:         
 Component:  Runtime System     |        Version:  6.4.1  
  Severity:  normal             |     Resolution:         
  Keywords:                     |             Os:  Unknown
Difficulty:  Unknown            |   Architecture:  Unknown
--------------------------------+-------------------------------------------
Comment (by guest):

 The following program demonstrates bug in 6.4.1 (6.4.0 was ok).
  if you compile it with "-threaded", run and press Ctrl-Break, you will
  see message "main.EXE: <stdin>: hGetLine: end of file" and program
  blocks (because forked thread is dead). the problem is that installed
  ctrl-break handler don't called in forked threads

  if you compile program without "-threaded" or with 6.4.0, it works as
  expected - pressing Ctrl-Break runs my handler so you will see
  "^Break! main.EXE: thread killed" message


 {{{
  import Control.Concurrent
  import Control.Exception
  import GHC.ConsoleHandler

  handleCtrlBreak action = do
    myThread <- myThreadId
    let onBreak event = do
          putStrLn " ^Break!"
          killThread myThread
    bracket (installHandler$ Catch onBreak) (installHandler) $  \oldHandler
 -> do
      action

  main =  do
    handleCtrlBreak $ do
      x <- newEmptyMVar
      forkIO$ do a <- getLine
                 print a
                 putMVar x ()
                 return ()
      takeMVar x
      return ()
 }}}

-- 
Ticket URL: <http://cvs.haskell.org/trac/ghc/ticket/637>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to