mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 23:04:50 +02:00
8170639: [Linux] jsig is limited to a maximum of 64 signals
Reviewed-by: dholmes, iklam
This commit is contained in:
parent
8ac55e2a99
commit
176e37f082
8 changed files with 29 additions and 64 deletions
|
@ -2658,11 +2658,6 @@ static void signalHandler(int sig, siginfo_t* info, void* uc) {
|
|||
bool os::Bsd::signal_handlers_are_installed = false;
|
||||
|
||||
// For signal-chaining
|
||||
struct sigaction sigact[NSIG];
|
||||
uint32_t sigs = 0;
|
||||
#if (32 < NSIG-1)
|
||||
#error "Not all signals can be encoded in sigs. Adapt its type!"
|
||||
#endif
|
||||
bool os::Bsd::libjsig_is_loaded = false;
|
||||
typedef struct sigaction *(*get_signal_t)(int);
|
||||
get_signal_t os::Bsd::get_signal_action = NULL;
|
||||
|
@ -2676,7 +2671,7 @@ struct sigaction* os::Bsd::get_chained_signal_action(int sig) {
|
|||
}
|
||||
if (actp == NULL) {
|
||||
// Retrieve the preinstalled signal handler from jvm
|
||||
actp = get_preinstalled_handler(sig);
|
||||
actp = os::Posix::get_preinstalled_handler(sig);
|
||||
}
|
||||
|
||||
return actp;
|
||||
|
@ -2739,19 +2734,6 @@ bool os::Bsd::chained_handler(int sig, siginfo_t* siginfo, void* context) {
|
|||
return chained;
|
||||
}
|
||||
|
||||
struct sigaction* os::Bsd::get_preinstalled_handler(int sig) {
|
||||
if ((((uint32_t)1 << (sig-1)) & sigs) != 0) {
|
||||
return &sigact[sig];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void os::Bsd::save_preinstalled_handler(int sig, struct sigaction& oldAct) {
|
||||
assert(sig > 0 && sig < NSIG, "vm signal out of expected range");
|
||||
sigact[sig] = oldAct;
|
||||
sigs |= (uint32_t)1 << (sig-1);
|
||||
}
|
||||
|
||||
// for diagnostic
|
||||
int sigflags[NSIG];
|
||||
|
||||
|
@ -2783,7 +2765,7 @@ void os::Bsd::set_signal_handler(int sig, bool set_installed) {
|
|||
return;
|
||||
} else if (UseSignalChaining) {
|
||||
// save the old handler in jvm
|
||||
save_preinstalled_handler(sig, oldAct);
|
||||
os::Posix::save_preinstalled_handler(sig, oldAct);
|
||||
// libjsig also interposes the sigaction() call below and saves the
|
||||
// old sigaction on it own.
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue