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

@ -2124,7 +2124,7 @@ void os::Solaris::init_signal_mem() {
memset(ourSigFlags, 0, sizeof(int) * (Maxsignum + 1));
}
void os::signal_init_pd() {
static void jdk_misc_signal_init() {
// Initialize signal semaphore
sig_sem = new Semaphore();
}
@ -2134,7 +2134,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");
}
@ -4243,6 +4243,10 @@ jint os::init_2(void) {
Solaris::signal_sets_init();
Solaris::init_signal_mem();
Solaris::install_signal_handlers();
// Initialize data for jdk.internal.misc.Signal
if (!ReduceSignalUsage) {
jdk_misc_signal_init();
}
// initialize synchronization primitives to use either thread or
// lwp synchronization (controlled by UseLWPSynchronization)