< prev index next >
src/hotspot/os/aix/os_aix.cpp
Print this page
*** 2994,3005 ****
// This boolean allows users to forward their own non-matching signals
// to JVM_handle_aix_signal, harmlessly.
bool os::Aix::signal_handlers_are_installed = false;
// For signal-chaining
- struct sigaction sigact[NSIG];
- sigset_t sigs;
bool os::Aix::libjsig_is_loaded = false;
typedef struct sigaction *(*get_signal_t)(int);
get_signal_t os::Aix::get_signal_action = NULL;
struct sigaction* os::Aix::get_chained_signal_action(int sig) {
--- 2994,3003 ----
*** 3009,3019 ****
// Retrieve the old signal handler from libjsig
actp = (*get_signal_action)(sig);
}
if (actp == NULL) {
// Retrieve the preinstalled signal handler from jvm
! actp = get_preinstalled_handler(sig);
}
return actp;
}
--- 3007,3017 ----
// Retrieve the old signal handler from libjsig
actp = (*get_signal_action)(sig);
}
if (actp == NULL) {
// Retrieve the preinstalled signal handler from jvm
! actp = os::Posix::get_preinstalled_handler(sig);
}
return actp;
}
*** 3072,3094 ****
}
}
return chained;
}
- struct sigaction* os::Aix::get_preinstalled_handler(int sig) {
- if (sigismember(&sigs, sig)) {
- return &sigact[sig];
- }
- return NULL;
- }
-
- void os::Aix::save_preinstalled_handler(int sig, struct sigaction& oldAct) {
- assert(sig > 0 && sig < NSIG, "vm signal out of expected range");
- sigact[sig] = oldAct;
- sigaddset(&sigs, sig);
- }
-
// for diagnostic
int sigflags[NSIG];
int os::Aix::get_our_sigflags(int sig) {
assert(sig > 0 && sig < NSIG, "vm signal out of expected range");
--- 3070,3079 ----
*** 3116,3126 ****
if (AllowUserSignalHandlers || !set_installed) {
// Do not overwrite; user takes responsibility to forward to us.
return;
} else if (UseSignalChaining) {
// save the old handler in jvm
! save_preinstalled_handler(sig, oldAct);
// libjsig also interposes the sigaction() call below and saves the
// old sigaction on it own.
} else {
fatal("Encountered unexpected pre-existing sigaction handler "
"%#lx for signal %d.", (long)oldhand, sig);
--- 3101,3111 ----
if (AllowUserSignalHandlers || !set_installed) {
// Do not overwrite; user takes responsibility to forward to us.
return;
} else if (UseSignalChaining) {
// save the old handler in jvm
! os::Posix::save_preinstalled_handler(sig, oldAct);
// libjsig also interposes the sigaction() call below and saves the
// old sigaction on it own.
} else {
fatal("Encountered unexpected pre-existing sigaction handler "
"%#lx for signal %d.", (long)oldhand, sig);
*** 3172,3182 ****
if (libjsig_is_loaded) {
// Tell libjsig jvm is setting signal handlers.
(*begin_signal_setting)();
}
- ::sigemptyset(&sigs);
set_signal_handler(SIGSEGV, true);
set_signal_handler(SIGPIPE, true);
set_signal_handler(SIGBUS, true);
set_signal_handler(SIGILL, true);
set_signal_handler(SIGFPE, true);
--- 3157,3166 ----
< prev index next >