As found out during review for JDK-8292695, HotSpot installs SIGQUIT handler even if -XX:+AllowUserSignalHandlers is set.
This is because HotSpot installs SIGQUIT handler in a different code path via os::signal(). For other signals, their handlers are installed by set_signal_handler(int sig), which respects -XX:+AllowUserSignalHandlers:
// Check for overwrite.
struct sigaction oldAct;
sigaction(sig, (struct sigaction*)NULL, &oldAct);
// Query the current signal handler. Needs to be a separate operation
// from installing a new handler since we need to honor AllowUserSignalHandlers.
void* oldhand = get_signal_handler(&oldAct);
if (!HANDLER_IS_IGN_OR_DFL(oldhand) &&
!HANDLER_IS(oldhand, javaSignalHandler)) {
if (AllowUserSignalHandlers) {
// Do not overwrite; user takes responsibility to forward to us.
return;
}
...
This is because HotSpot installs SIGQUIT handler in a different code path via os::signal(). For other signals, their handlers are installed by set_signal_handler(int sig), which respects -XX:+AllowUserSignalHandlers:
// Check for overwrite.
struct sigaction oldAct;
sigaction(sig, (struct sigaction*)NULL, &oldAct);
// Query the current signal handler. Needs to be a separate operation
// from installing a new handler since we need to honor AllowUserSignalHandlers.
void* oldhand = get_signal_handler(&oldAct);
if (!HANDLER_IS_IGN_OR_DFL(oldhand) &&
!HANDLER_IS(oldhand, javaSignalHandler)) {
if (AllowUserSignalHandlers) {
// Do not overwrite; user takes responsibility to forward to us.
return;
}
...