
Hello Branimir, Sunday, December 11, 2005, 9:43:08 PM, you wrote: BM> After seeing this only I can tell that for example in C++ one can't cout BM> clog cerr BM> or post some event via synchronized event queue or condition variable BM> from signal handler. BM> All of that would result in ghosts and goblins in program. it is not the case for Haskell. at least, the following handler works very well in GHC 6.4/windows: handleCtrlBreak handler action = do myThread <- myThreadId let onBreak event = do putStr " ^Break!" programTerminated =: True handler killThread myThread bracket (installHandler$ Catch onBreak) (installHandler) $ \oldHandler -> do action
This way I know what the signal was that triggered the handler and I can tell that it was triggered. The deadlock is somewhere else because the handler is not being tripped.
but in 6.4.1 (ATTENTION, JOEL!) this code was breaked. i does an investigation and found that in 6.4.1 with -threaded ^Break hadnling works only in main program thread! i complained several days ago in ghc-bugs list. you, Joel, can get example i posted there, replace windows-specific ^Break handling with Unix one and test it -- Best regards, Bulat mailto:bulatz@HotPOP.com