1606
1607 void os::print_jni_name_suffix_on(outputStream* st, int args_size) {
1608 // no suffix required
1609 }
1610
1611 ////////////////////////////////////////////////////////////////////////////////
1612 // sun.misc.Signal support
1613
1614 static volatile jint sigint_count = 0;
1615
1616 static void
1617 UserHandler(int sig, void *siginfo, void *context) {
1618 // 4511530 - sem_post is serialized and handled by the manager thread. When
1619 // the program is interrupted by Ctrl-C, SIGINT is sent to every thread. We
1620 // don't want to flood the manager thread with sem_post requests.
1621 if (sig == SIGINT && Atomic::add(1, &sigint_count) > 1)
1622 return;
1623
1624 // Ctrl-C is pressed during error reporting, likely because the error
1625 // handler fails to abort. Let VM die immediately.
1626 if (sig == SIGINT && is_error_reported()) {
1627 os::die();
1628 }
1629
1630 os::signal_notify(sig);
1631 }
1632
1633 void* os::user_handler() {
1634 return CAST_FROM_FN_PTR(void*, UserHandler);
1635 }
1636
1637 extern "C" {
1638 typedef void (*sa_handler_t)(int);
1639 typedef void (*sa_sigaction_t)(int, siginfo_t *, void *);
1640 }
1641
1642 void* os::signal(int signal_number, void* handler) {
1643 struct sigaction sigAct, oldSigAct;
1644
1645 sigfillset(&(sigAct.sa_mask));
1646
|
1606
1607 void os::print_jni_name_suffix_on(outputStream* st, int args_size) {
1608 // no suffix required
1609 }
1610
1611 ////////////////////////////////////////////////////////////////////////////////
1612 // sun.misc.Signal support
1613
1614 static volatile jint sigint_count = 0;
1615
1616 static void
1617 UserHandler(int sig, void *siginfo, void *context) {
1618 // 4511530 - sem_post is serialized and handled by the manager thread. When
1619 // the program is interrupted by Ctrl-C, SIGINT is sent to every thread. We
1620 // don't want to flood the manager thread with sem_post requests.
1621 if (sig == SIGINT && Atomic::add(1, &sigint_count) > 1)
1622 return;
1623
1624 // Ctrl-C is pressed during error reporting, likely because the error
1625 // handler fails to abort. Let VM die immediately.
1626 if (sig == SIGINT && VMError::is_error_reported()) {
1627 os::die();
1628 }
1629
1630 os::signal_notify(sig);
1631 }
1632
1633 void* os::user_handler() {
1634 return CAST_FROM_FN_PTR(void*, UserHandler);
1635 }
1636
1637 extern "C" {
1638 typedef void (*sa_handler_t)(int);
1639 typedef void (*sa_sigaction_t)(int, siginfo_t *, void *);
1640 }
1641
1642 void* os::signal(int signal_number, void* handler) {
1643 struct sigaction sigAct, oldSigAct;
1644
1645 sigfillset(&(sigAct.sa_mask));
1646
|