Ctrl-Break handler don't work in forked threads in "-threaded" RTS
Bulat Ziganshin
bulatz at HotPOP.com
Thu Dec 8 16:21:25 EST 2005
Hello Simon,
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 ()
--
Best regards,
Bulat mailto:bulatz at HotPOP.com
More information about the Glasgow-haskell-bugs
mailing list