hotspot/src/os/linux/vm/os_linux.cpp
changeset 33794 41ef3dc95179
parent 33756 fc1eddc092e7
child 34145 f8097485b483
equal deleted inserted replaced
33790:229ed95d8958 33794:41ef3dc95179
  4250   return sigflags[sig];
  4250   return sigflags[sig];
  4251 }
  4251 }
  4252 
  4252 
  4253 void os::Linux::set_our_sigflags(int sig, int flags) {
  4253 void os::Linux::set_our_sigflags(int sig, int flags) {
  4254   assert(sig > 0 && sig < MAXSIGNUM, "vm signal out of expected range");
  4254   assert(sig > 0 && sig < MAXSIGNUM, "vm signal out of expected range");
  4255   sigflags[sig] = flags;
  4255   if (sig > 0 && sig < MAXSIGNUM) {
       
  4256     sigflags[sig] = flags;
       
  4257   }
  4256 }
  4258 }
  4257 
  4259 
  4258 void os::Linux::set_signal_handler(int sig, bool set_installed) {
  4260 void os::Linux::set_signal_handler(int sig, bool set_installed) {
  4259   // Check for overwrite.
  4261   // Check for overwrite.
  4260   struct sigaction oldAct;
  4262   struct sigaction oldAct;
  5925    */
  5927    */
  5926   const int core_pattern_len = 129;
  5928   const int core_pattern_len = 129;
  5927   char core_pattern[core_pattern_len] = {0};
  5929   char core_pattern[core_pattern_len] = {0};
  5928 
  5930 
  5929   int core_pattern_file = ::open("/proc/sys/kernel/core_pattern", O_RDONLY);
  5931   int core_pattern_file = ::open("/proc/sys/kernel/core_pattern", O_RDONLY);
  5930   if (core_pattern_file != -1) {
  5932   if (core_pattern_file == -1) {
  5931     ssize_t ret = ::read(core_pattern_file, core_pattern, core_pattern_len);
       
  5932     ::close(core_pattern_file);
       
  5933 
       
  5934     if (ret > 0) {
       
  5935       char *last_char = core_pattern + strlen(core_pattern) - 1;
       
  5936 
       
  5937       if (*last_char == '\n') {
       
  5938         *last_char = '\0';
       
  5939       }
       
  5940     }
       
  5941   }
       
  5942 
       
  5943   if (strlen(core_pattern) == 0) {
       
  5944     return -1;
  5933     return -1;
       
  5934   }
       
  5935 
       
  5936   ssize_t ret = ::read(core_pattern_file, core_pattern, core_pattern_len);
       
  5937   ::close(core_pattern_file);
       
  5938   if (ret <= 0 || ret >= core_pattern_len || core_pattern[0] == '\n') {
       
  5939     return -1;
       
  5940   }
       
  5941   if (core_pattern[ret-1] == '\n') {
       
  5942     core_pattern[ret-1] = '\0';
       
  5943   } else {
       
  5944     core_pattern[ret] = '\0';
  5945   }
  5945   }
  5946 
  5946 
  5947   char *pid_pos = strstr(core_pattern, "%p");
  5947   char *pid_pos = strstr(core_pattern, "%p");
  5948   int written;
  5948   int written;
  5949 
  5949