Improve the shutdownHaskellAndSignal and add fast exit
authorDuncan Coutts <duncan@well-typed.com>
Thu, 14 Nov 2013 15:54:13 +0000 (15:54 +0000)
committerDuncan Coutts <duncan@well-typed.com>
Thu, 14 Nov 2013 16:06:24 +0000 (16:06 +0000)
commita987b8004e83c694e00cdd47cbf43a9588eb47d4
tree0e1e6a30e428a128437244c968bbe82d1112d35d
parentad0b943293cce74baf06ea36e1a4d51a3631dfdf
Improve the shutdownHaskellAndSignal and add fast exit

This is the RTS part of a patch to base's topHandler to handle exiting
by a signal.

The intended behaviour is that on Unix, throwing ExitFailure (-sig)
results in the process terminating with that signal. Previously
shutdownHaskellAndSignal was only used for exiting with SIGINT due to
the UserInterrupt exception.

Improve shutdownHaskellAndSignal to do the signal part more carefully.
In particular, it (should) now reliably terminates the process one way
or another. Previusly if the signal was blocked, ignored or handled then
shutdownHaskellAndSignal would actually return!

Also, the topHandler code has two paths a careful shutdown and a "fast
exit" where it does not give finalisers a chance to run. We want to
support that mode also when we want to exit by signal. So rather than
the base code directly calling stg_exit as it did before, we have a
fastExit bool paramater for both shutdownHaskellAnd{Exit,Signal}.
includes/RtsAPI.h
rts/RtsMain.c
rts/RtsStartup.c