Wed Jul  9 01:49:16 PDT 2008  Simon Marlow <[EMAIL PROTECTED]>
  * FIX part of #2301, and #1619
  
  2301: Control-C now causes the new exception (AsyncException
  UserInterrupt) to be raised in the main thread.  The signal handler
  is set up by GHC.TopHandler.runMainIO, and can be overriden in the
  usual way by installing a new signal handler.  The advantage is that
  now all programs will get a chance to clean up on ^C.
  
  When UserInterrupt is caught by the topmost handler, we now exit the
  program via kill(getpid(),SIGINT), which tells the parent process that
  we exited as a result of ^C, so the parent can take appropriate action
  (it might want to exit too, for example).
  
  One subtlety is that we have to use a weak reference to the ThreadId
  for the main thread, so that the signal handler doesn't prevent the
  main thread from being subject to deadlock detection.
  
  1619: we now ignore SIGPIPE by default.  Although POSIX says that a
  SIGPIPE should terminate the process by default, I wonder if this
  decision was made because many C applications failed to check the exit
  code from write().  In Haskell a failed write due to a closed pipe
  will generate an exception anyway, so the main difference is that we
  now get a useful error message instead of silent program termination.
  See #1619 for more discussion.

    M ./includes/RtsAPI.h +4
    M ./rts/Linker.c +1
    M ./rts/RtsSignals.h +1
    M ./rts/RtsStartup.c -4 +21
    M ./rts/posix/Signals.c +27
    M ./rts/win32/ConsoleHandler.c +6

View patch online:
http://darcs.haskell.org/ghc/_darcs/patches/20080709084916-12142-f06e48c951dc6151045a1f6227cadeba98adfed8.gz

_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to