8202014: Possible to receive signal before signal semaphore created

Initialize jdk.internal.misc.Signal in os_init2 and rename initialization functions.

Reviewed-by: dholmes, stuefe
This commit is contained in:
Coleen Phillimore 2018-05-18 15:56:42 -04:00
parent bc795f4eb8
commit 768632f24b
11 changed files with 41 additions and 28 deletions

View file

@ -2520,7 +2520,7 @@ static volatile jint pending_signals[NSIG+1] = { 0 };
static Semaphore* sig_sem = NULL;
static PosixSemaphore sr_semaphore;
void os::signal_init_pd() {
static void jdk_misc_signal_init() {
// Initialize signal structures
::memset((void*)pending_signals, 0, sizeof(pending_signals));
@ -2533,7 +2533,7 @@ void os::signal_notify(int sig) {
Atomic::inc(&pending_signals[sig]);
sig_sem->signal();
} else {
// Signal thread is not created with ReduceSignalUsage and signal_init_pd
// Signal thread is not created with ReduceSignalUsage and jdk_misc_signal_init
// initialization isn't called.
assert(ReduceSignalUsage, "signal semaphore should be created");
}
@ -4444,7 +4444,7 @@ extern "C" JNIEXPORT int JVM_handle_linux_signal(int signo,
void* ucontext,
int abort_if_unrecognized);
void signalHandler(int sig, siginfo_t* info, void* uc) {
static void signalHandler(int sig, siginfo_t* info, void* uc) {
assert(info != NULL && uc != NULL, "it must be old kernel");
int orig_errno = errno; // Preserve errno value over signal handler.
JVM_handle_linux_signal(sig, info, uc, true);
@ -4992,6 +4992,10 @@ jint os::init_2(void) {
Linux::signal_sets_init();
Linux::install_signal_handlers();
// Initialize data for jdk.internal.misc.Signal
if (!ReduceSignalUsage) {
jdk_misc_signal_init();
}
// Check and sets minimum stack sizes against command line options
if (Posix::set_minimum_stack_sizes() == JNI_ERR) {