src/hotspot/os/linux/os_linux.cpp
changeset 50184 1a4101ebec92
parent 50178 7b0291382aff
child 50429 83aec1d357d4
equal deleted inserted replaced
50183:4befb3c9c758 50184:1a4101ebec92
  2518 
  2518 
  2519 // Linux(POSIX) specific hand shaking semaphore.
  2519 // Linux(POSIX) specific hand shaking semaphore.
  2520 static Semaphore* sig_sem = NULL;
  2520 static Semaphore* sig_sem = NULL;
  2521 static PosixSemaphore sr_semaphore;
  2521 static PosixSemaphore sr_semaphore;
  2522 
  2522 
  2523 void os::signal_init_pd() {
  2523 static void jdk_misc_signal_init() {
  2524   // Initialize signal structures
  2524   // Initialize signal structures
  2525   ::memset((void*)pending_signals, 0, sizeof(pending_signals));
  2525   ::memset((void*)pending_signals, 0, sizeof(pending_signals));
  2526 
  2526 
  2527   // Initialize signal semaphore
  2527   // Initialize signal semaphore
  2528   sig_sem = new Semaphore();
  2528   sig_sem = new Semaphore();
  2531 void os::signal_notify(int sig) {
  2531 void os::signal_notify(int sig) {
  2532   if (sig_sem != NULL) {
  2532   if (sig_sem != NULL) {
  2533     Atomic::inc(&pending_signals[sig]);
  2533     Atomic::inc(&pending_signals[sig]);
  2534     sig_sem->signal();
  2534     sig_sem->signal();
  2535   } else {
  2535   } else {
  2536     // Signal thread is not created with ReduceSignalUsage and signal_init_pd
  2536     // Signal thread is not created with ReduceSignalUsage and jdk_misc_signal_init
  2537     // initialization isn't called.
  2537     // initialization isn't called.
  2538     assert(ReduceSignalUsage, "signal semaphore should be created");
  2538     assert(ReduceSignalUsage, "signal semaphore should be created");
  2539   }
  2539   }
  2540 }
  2540 }
  2541 
  2541 
  4442 extern "C" JNIEXPORT int JVM_handle_linux_signal(int signo,
  4442 extern "C" JNIEXPORT int JVM_handle_linux_signal(int signo,
  4443                                                  siginfo_t* siginfo,
  4443                                                  siginfo_t* siginfo,
  4444                                                  void* ucontext,
  4444                                                  void* ucontext,
  4445                                                  int abort_if_unrecognized);
  4445                                                  int abort_if_unrecognized);
  4446 
  4446 
  4447 void signalHandler(int sig, siginfo_t* info, void* uc) {
  4447 static void signalHandler(int sig, siginfo_t* info, void* uc) {
  4448   assert(info != NULL && uc != NULL, "it must be old kernel");
  4448   assert(info != NULL && uc != NULL, "it must be old kernel");
  4449   int orig_errno = errno;  // Preserve errno value over signal handler.
  4449   int orig_errno = errno;  // Preserve errno value over signal handler.
  4450   JVM_handle_linux_signal(sig, info, uc, true);
  4450   JVM_handle_linux_signal(sig, info, uc, true);
  4451   errno = orig_errno;
  4451   errno = orig_errno;
  4452 }
  4452 }
  4990     return JNI_ERR;
  4990     return JNI_ERR;
  4991   }
  4991   }
  4992 
  4992 
  4993   Linux::signal_sets_init();
  4993   Linux::signal_sets_init();
  4994   Linux::install_signal_handlers();
  4994   Linux::install_signal_handlers();
       
  4995   // Initialize data for jdk.internal.misc.Signal
       
  4996   if (!ReduceSignalUsage) {
       
  4997     jdk_misc_signal_init();
       
  4998   }
  4995 
  4999 
  4996   // Check and sets minimum stack sizes against command line options
  5000   // Check and sets minimum stack sizes against command line options
  4997   if (Posix::set_minimum_stack_sizes() == JNI_ERR) {
  5001   if (Posix::set_minimum_stack_sizes() == JNI_ERR) {
  4998     return JNI_ERR;
  5002     return JNI_ERR;
  4999   }
  5003   }