< prev index next >
src/hotspot/os/bsd/os_bsd.cpp
Print this page
@@ -2656,15 +2656,10 @@
// This boolean allows users to forward their own non-matching signals
// to JVM_handle_bsd_signal, harmlessly.
bool os::Bsd::signal_handlers_are_installed = false;
// For signal-chaining
-struct sigaction sigact[NSIG];
-uint32_t sigs = 0;
-#if (32 < NSIG-1)
-#error "Not all signals can be encoded in sigs. Adapt its type!"
-#endif
bool os::Bsd::libjsig_is_loaded = false;
typedef struct sigaction *(*get_signal_t)(int);
get_signal_t os::Bsd::get_signal_action = NULL;
struct sigaction* os::Bsd::get_chained_signal_action(int sig) {
@@ -2674,11 +2669,11 @@
// 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);
+ actp = os::Posix::get_preinstalled_handler(sig);
}
return actp;
}
@@ -2737,23 +2732,10 @@
}
}
return chained;
}
-struct sigaction* os::Bsd::get_preinstalled_handler(int sig) {
- if ((((uint32_t)1 << (sig-1)) & sigs) != 0) {
- return &sigact[sig];
- }
- return NULL;
-}
-
-void os::Bsd::save_preinstalled_handler(int sig, struct sigaction& oldAct) {
- assert(sig > 0 && sig < NSIG, "vm signal out of expected range");
- sigact[sig] = oldAct;
- sigs |= (uint32_t)1 << (sig-1);
-}
-
// for diagnostic
int sigflags[NSIG];
int os::Bsd::get_our_sigflags(int sig) {
assert(sig > 0 && sig < NSIG, "vm signal out of expected range");
@@ -2781,11 +2763,11 @@
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);
+ 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);
< prev index next >