[Haskell-cafe] Re: syscall, sigpause and EINTR on Mac OSX

Joel Reymont joelr1 at gmail.com
Sun Dec 11 13:25:47 EST 2005

Understood. But I'm printing things in the signal handler to show  
that it was triggered. And I trigger it when ^C is pressed (well, one  
more signal):

initSnippets :: IO ()
initSnippets =
     do initSSL
        installHandler sigPIPE Ignore Nothing
        flip mapM_ [sigTERM, sigINT] $ \sig -> do
          installHandler sig (handler sig) Nothing
              where handler sig = Catch $
                                  do trace_ $ "Signal " ++ show sig + 
+ " caught."
                                     trace_ "Broadcasting Quit..."
                                     broadcast (ForcedQuit :: Event ())

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.

The issue of the signal handler being tripped by a phantom ^C (signal  
2) is another issue entirely.

On Dec 11, 2005, at 6:10 PM, Branimir Maksimovic wrote:

> Though I frorgot to add that deadlock can be caused by signal  
> somewhere else
> (eg other thread) if signal handler eg locks mutex internally or  
> calls some
> other non asynchronous safe functions like locking functions.
> This is likely scenario, if you doubt at signal handlers but I  
> don;t know the details
> . Deadlocks can be caused by other things, not neccessarily signals.


More information about the Haskell-Cafe mailing list