=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/plugin/Attic/mysig.c,v retrieving revision 1.1 retrieving revision 1.3 diff -u -p -r1.1 -r1.3 --- OpenXM/src/kan96xx/plugin/Attic/mysig.c 2016/03/30 08:25:43 1.1 +++ OpenXM/src/kan96xx/plugin/Attic/mysig.c 2016/03/30 21:34:03 1.3 @@ -1,4 +1,4 @@ -/* $OpenXM$ */ +/* $OpenXM: OpenXM/src/kan96xx/plugin/mysig.c,v 1.2 2016/03/30 09:20:40 takayama Exp $ */ #include #include #include @@ -6,25 +6,42 @@ #include #include "mysig.h" -int unblock_sigchild_sigint(void) { +/* + sigset SIGINT, SIGCHLD, SIGUSR1 + */ +int unblock_signal(int sigset[]) { struct sigaction act; sigset_t set; sigset_t oldset; + int i; sigemptyset(&set); - sigaddset(&set,SIGINT); - sigaddset(&set,SIGCHLD); + for (i=0; sigset[i] > 0; i++) sigaddset(&set,sigset[i]); sigprocmask(SIG_UNBLOCK,&set,&oldset); return(0); } +/* Add (or) blocked signals, see sigprocmask */ +int block_signal(int sigset[]) { + struct sigaction act; + sigset_t set; + sigset_t oldset; + int i; + sigemptyset(&set); + for (i=0; sigset[i] > 0; i++) sigaddset(&set,sigset[i]); + sigprocmask(SIG_BLOCK,&set,&oldset); + return(0); +} -int set_sigchild(void (*handler)(void)) { +int set_signal(int sig,void (*handler)(int m)) { struct sigaction act; struct sigaction oldact; act.sa_handler=handler; act.sa_flags=0; act.sa_flags |= SA_RESTART; sigemptyset(&act.sa_mask); - return(sigaction(SIGCHLD,&act,&oldact)); + return(sigaction(sig,&act,&oldact)); +} +int mysignal(int sig,void (*handler)(int m)) { + return(set_signal(sig,handler)); }