bracket not running the final action on termination through SIGTERM
If a program compiled with GHC receives a SIGTERM signal, while in a bracket, the final action of the bracket isn't executed. This can be tested with this program:
import Control.Exception
import Control.Concurrent
main = bracket (return "ending")
(\x -> putStrLn x)
(\_ -> threadDelay 10000000000)
When running this and interrupting with ctrl-c (thus SIGINT) it prints "ending", like expected. When interrupting it with killall -TERM test (assuming the program was named test) "ending" isn't printed and the program terminates immediately. It prints a system specific message though.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | libraries/base |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | ekmett, hvr |
| Operating system | |
| Architecture |