< prev index next >

src/os/posix/vm/os_posix.cpp

Print this page
rev 13094 : 8182034: os::Posix::is_valid_signal() should, if it uses sigaddset, initialize the signal set
Reviewed-by:


 743     }
 744   }
 745   return -1;
 746 }
 747 
 748 int os::get_signal_number(const char* signal_name) {
 749   return os::Posix::get_signal_number(signal_name);
 750 }
 751 
 752 // Returns true if signal number is valid.
 753 bool os::Posix::is_valid_signal(int sig) {
 754   // MacOS not really POSIX compliant: sigaddset does not return
 755   // an error for invalid signal numbers. However, MacOS does not
 756   // support real time signals and simply seems to have just 33
 757   // signals with no holes in the signal range.
 758 #ifdef __APPLE__
 759   return sig >= 1 && sig < NSIG;
 760 #else
 761   // Use sigaddset to check for signal validity.
 762   sigset_t set;

 763   if (sigaddset(&set, sig) == -1 && errno == EINVAL) {
 764     return false;
 765   }
 766   return true;
 767 #endif
 768 }
 769 
 770 // Returns:
 771 // NULL for an invalid signal number
 772 // "SIG<num>" for a valid but unknown signal number
 773 // signal name otherwise.
 774 const char* os::exception_name(int sig, char* buf, size_t size) {
 775   if (!os::Posix::is_valid_signal(sig)) {
 776     return NULL;
 777   }
 778   const char* const name = os::Posix::get_signal_name(sig, buf, size);
 779   if (strcmp(name, "UNKNOWN") == 0) {
 780     jio_snprintf(buf, size, "SIG%d", sig);
 781   }
 782   return buf;




 743     }
 744   }
 745   return -1;
 746 }
 747 
 748 int os::get_signal_number(const char* signal_name) {
 749   return os::Posix::get_signal_number(signal_name);
 750 }
 751 
 752 // Returns true if signal number is valid.
 753 bool os::Posix::is_valid_signal(int sig) {
 754   // MacOS not really POSIX compliant: sigaddset does not return
 755   // an error for invalid signal numbers. However, MacOS does not
 756   // support real time signals and simply seems to have just 33
 757   // signals with no holes in the signal range.
 758 #ifdef __APPLE__
 759   return sig >= 1 && sig < NSIG;
 760 #else
 761   // Use sigaddset to check for signal validity.
 762   sigset_t set;
 763   sigemptyset(&set);
 764   if (sigaddset(&set, sig) == -1 && errno == EINVAL) {
 765     return false;
 766   }
 767   return true;
 768 #endif
 769 }
 770 
 771 // Returns:
 772 // NULL for an invalid signal number
 773 // "SIG<num>" for a valid but unknown signal number
 774 // signal name otherwise.
 775 const char* os::exception_name(int sig, char* buf, size_t size) {
 776   if (!os::Posix::is_valid_signal(sig)) {
 777     return NULL;
 778   }
 779   const char* const name = os::Posix::get_signal_name(sig, buf, size);
 780   if (strcmp(name, "UNKNOWN") == 0) {
 781     jio_snprintf(buf, size, "SIG%d", sig);
 782   }
 783   return buf;


< prev index next >