src/java.base/aix/native/libjsig/jsig.c
changeset 49440 396ea30afbd5
parent 47216 71c04702a3d5
equal deleted inserted replaced
49439:bf53d82a51e5 49440:396ea30afbd5
    35 #include <dlfcn.h>
    35 #include <dlfcn.h>
    36 #include <pthread.h>
    36 #include <pthread.h>
    37 #include <stdio.h>
    37 #include <stdio.h>
    38 #include <stdlib.h>
    38 #include <stdlib.h>
    39 #include <stdint.h>
    39 #include <stdint.h>
       
    40 #include "jni.h"
    40 
    41 
    41 #define bool int
    42 #define bool int
    42 #define true 1
    43 #define true 1
    43 #define false 0
    44 #define false 0
    44 
    45 
   138     signal_unlock();
   139     signal_unlock();
   139     return oldhandler;
   140     return oldhandler;
   140   }
   141   }
   141 }
   142 }
   142 
   143 
   143 sa_handler_t signal(int sig, sa_handler_t disp) {
   144 JNIEXPORT sa_handler_t JNICALL
       
   145 signal(int sig, sa_handler_t disp) {
   144   return set_signal(sig, disp, false);
   146   return set_signal(sig, disp, false);
   145 }
   147 }
   146 
   148 
   147 sa_handler_t sigset(int sig, sa_handler_t disp) {
   149 JNIEXPORT sa_handler_t JNICALL
       
   150 sigset(int sig, sa_handler_t disp) {
   148   return set_signal(sig, disp, true);
   151   return set_signal(sig, disp, true);
   149 }
   152 }
   150 
   153 
   151 static int call_os_sigaction(int sig, const struct sigaction  *act,
   154 static int call_os_sigaction(int sig, const struct sigaction  *act,
   152                              struct sigaction *oact) {
   155                              struct sigaction *oact) {
   159     }
   162     }
   160   }
   163   }
   161   return (*os_sigaction)(sig, act, oact);
   164   return (*os_sigaction)(sig, act, oact);
   162 }
   165 }
   163 
   166 
   164 int sigaction(int sig, const struct sigaction *act, struct sigaction *oact) {
   167 JNIEXPORT int JNICALL
       
   168 sigaction(int sig, const struct sigaction *act, struct sigaction *oact) {
   165   int res;
   169   int res;
   166   bool sigused;
   170   bool sigused;
   167   struct sigaction oldAct;
   171   struct sigaction oldAct;
   168 
   172 
   169   signal_lock();
   173   signal_lock();
   204     return res;
   208     return res;
   205   }
   209   }
   206 }
   210 }
   207 
   211 
   208 /* The three functions for the jvm to call into. */
   212 /* The three functions for the jvm to call into. */
   209 void JVM_begin_signal_setting() {
   213 JNIEXPORT void JNICALL
       
   214 JVM_begin_signal_setting() {
   210   signal_lock();
   215   signal_lock();
   211   sigemptyset(&jvmsigs);
   216   sigemptyset(&jvmsigs);
   212   jvm_signal_installing = true;
   217   jvm_signal_installing = true;
   213   tid = pthread_self();
   218   tid = pthread_self();
   214   signal_unlock();
   219   signal_unlock();
   215 }
   220 }
   216 
   221 
   217 void JVM_end_signal_setting() {
   222 JNIEXPORT void JNICALL
       
   223 JVM_end_signal_setting() {
   218   signal_lock();
   224   signal_lock();
   219   jvm_signal_installed = true;
   225   jvm_signal_installed = true;
   220   jvm_signal_installing = false;
   226   jvm_signal_installing = false;
   221   pthread_cond_broadcast(&cond);
   227   pthread_cond_broadcast(&cond);
   222   signal_unlock();
   228   signal_unlock();
   223 }
   229 }
   224 
   230 
   225 struct sigaction *JVM_get_signal_action(int sig) {
   231 JNIEXPORT struct sigaction * JNICALL
       
   232 JVM_get_signal_action(int sig) {
   226   /* Does race condition make sense here? */
   233   /* Does race condition make sense here? */
   227   if (sigismember(&jvmsigs, sig)) {
   234   if (sigismember(&jvmsigs, sig)) {
   228     return &sact[sig];
   235     return &sact[sig];
   229   }
   236   }
   230   return NULL;
   237   return NULL;