Ctrl-Break handler doesn't work in forked threads in "-threaded" RTS
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 ()