Comment 72 for bug 73536

Revision history for this message
In , Karlt (karlt) wrote :

Comment on attachment 8959924
Bug 336193 - P1: Use SignalPipeWatcher to detect signals SIGTERM/SIGINT/SIGHUP and quit application gracefully.

https://reviewboard.mozilla.org/r/228682/#review235302

> I based this off nsProfileLock's CATCH_SIGNAL() which does not register for signal handlers that have already been set to SIG_IGN. I guess the logic is that if some other component has already chosen to ignore the signal then there is probably a good reason for that and we shouldn't interfere. It would also be inconsistent if we treated it like normal, started shutdown and then restored SIG_IGN which would not follow through with killing the process for subsequent termination attempts. It is always possible to change the signal handler to something else before calling RegisterCallback() to get around this if need be.

SignalPipeWatcher is more general than just handling termination signals (although the SignalPipeWatcher interface is not documented and so it is not clear what it is suitable for, and the whole situation with others also calling sigaction for the same signals is already delicate), and so I wouldn't treat the SIG_IGN case special if I were writing this myself.

Changing the signal handler to something else before calling RegisterCallback, doesn't work so well with UnregisterCallback.

But I checked "The default action for an unhandled real-time signal is to terminate the receiving process." and so the existing client, nsMemoryInfoDumper should not trigger this case. That makes this harmless for now at least, and so feel free to drop this issue if you prefer. At least we have a record of the reason for the check, so that someone can re-evaluate later if required.