diff options
Diffstat (limited to 'src/lib9/rendez-signal.c')
-rw-r--r-- | src/lib9/rendez-signal.c | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/src/lib9/rendez-signal.c b/src/lib9/rendez-signal.c deleted file mode 100644 index 744a8fc8..00000000 --- a/src/lib9/rendez-signal.c +++ /dev/null @@ -1,64 +0,0 @@ -#include <u.h> -#include <signal.h> -#include <libc.h> - -#define DBG 0 - -static void -ign(int x) -{ - USED(x); -} - -void /*__attribute__((constructor))*/ -ignusr1(int restart) -{ - struct sigaction sa; - - memset(&sa, 0, sizeof sa); - sa.sa_handler = ign; - sigemptyset(&sa.sa_mask); - sigaddset(&sa.sa_mask, SIGUSR1); - if(restart) - sa.sa_flags = SA_RESTART; - sigaction(SIGUSR1, &sa, nil); -} - -void -_procsleep(_Procrend *r) -{ - sigset_t mask; - - /* - * Go to sleep. - * - * Block USR1, set the handler to interrupt system calls, - * unlock the vouslock so our waker can wake us, - * and then suspend. - */ - r->asleep = 1; - r->pid = getpid(); - - sigprocmask(SIG_SETMASK, nil, &mask); - sigaddset(&mask, SIGUSR1); - sigprocmask(SIG_SETMASK, &mask, nil); - ignusr1(0); - unlock(r->l); - sigdelset(&mask, SIGUSR1); - sigsuspend(&mask); - - /* - * We're awake. Make USR1 not interrupt system calls. - */ - ignusr1(1); - assert(r->asleep == 0); - lock(r->l); -} - -void -_procwakeup(_Procrend *r) -{ - r->asleep = 0; - assert(r->pid >= 1); - kill(r->pid, SIGUSR1); -} |