9 void handler(int sig, siginfo_t *si, void *ctx)
11 if (si->si_code != SI_QUEUE)
12 errx(1, "si_code != SI_QUEUE");
13 if (si->si_value.sival_int != received)
14 errx(1, "signal is out of order");
26 sa.sa_flags = SA_SIGINFO;
27 sigemptyset(&sa.sa_mask);
28 sa.sa_sigaction = handler;
29 sigaction(SIGRTMIN, &sa, NULL);
31 sigaddset(&set, SIGRTMIN);
32 sigprocmask(SIG_BLOCK, &set, NULL);
36 ret = sigqueue(getpid(), SIGRTMIN, val);
38 if (errno != EAGAIN) {
39 errx(1, "errno != EAGAIN");
45 sigprocmask(SIG_UNBLOCK, &set, NULL);
47 errx(1, "error, signal lost");