Rewrite of signal-handling.
authorSimon Marlow <marlowsd@gmail.com>
Thu, 19 Feb 2009 10:05:32 +0000 (10:05 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Thu, 19 Feb 2009 10:05:32 +0000 (10:05 +0000)
commit1c4608e3b8737dbb9204f850af4d680ccea7d8ec
tree4b0a197cbf665b4f15f5c29b399edb5b16481c11
parentcfd7c9a5bdcc7f7c414b408d19c8a39a2917eec8
Rewrite of signal-handling.

The API is the same (for now).  The new implementation has the
capability to define signal handlers that have access to the siginfo
of the signal (#592), but this functionality is not exposed in this
patch.

#2451 is the ticket for the new API.

The main purpose of bringing this in now is to fix race conditions in
the old signal handling code (#2858).  Later we can enable the new
API in the HEAD.

Implementation differences:

 - More of the signal-handling is moved into Haskell.  We store the
   table of signal handlers in an MVar, rather than having a table of
   StablePtrs in the RTS.

 - In the threaded RTS, the siginfo of the signal is passed down the
   pipe to the IO manager thread, which manages the business of
   starting up new signal handler threads.  In the non-threaded RTS,
   the siginfo of caught signals is stored in the RTS, and the
   scheduler starts new signal handler threads.
System/Posix.hs
System/Posix/Process.hsc
System/Posix/Process/Internals.hs
System/Posix/Signals.hsc [moved from System/Posix/Signals.hs with 75% similarity]
tests/all.T
tests/signals004.hs [new file with mode: 0644]