Sorry, I can't reproduce the problem. I run Test.hs over and over again in one window, and run killall -TERM Test over and over (in a while loop) in another window, and so far no core dumps. Is there something I'm missing?

In any case I think a fix for this will probably have to wait until I've finished the signal overhaul (so 6.12), unless the fix is easy.

I intend to fix this by bringing in my new signal-handling code, which moves more of the signal-handling into Haskell. The original plan was to also extend the user API, but we could bring in the low-level machinery without disturbing the API for now. I'd rather do this than spend time fixing bugs in the current implementation, which is rather ugly.

I think these patches should fix the problem, since we no longer have the RTS table of StablePtrs to signal handlers. I'd be grateful if you could test the new code and let me know if you still encounter any problems.

patch to libraries/unix:

Thu Feb 19 02:05:32 PST 2009 Simon Marlow <[email protected]>
* Rewrite of signal-handling.
Ignore-this: 1579194c10020dc34af715c225a9f207
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.