< prev index next >

src/hotspot/os/bsd/os_bsd.cpp

Print this page

        

*** 2656,2670 **** // 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) { --- 2656,2665 ----
*** 2674,2684 **** // 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; } --- 2669,2679 ---- // 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; }
*** 2737,2759 **** } } 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"); --- 2732,2741 ----
*** 2781,2791 **** 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); --- 2763,2773 ---- 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);
*** 2851,2860 **** --- 2833,2843 ---- if (libjsig_is_loaded) { // Tell libjsig jvm is setting signal handlers (*begin_signal_setting)(); } + os::Posix::init_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);
< prev index next >