sigqtest1.c revision 152155
1/* $FreeBSD: head/tools/regression/sigqueue/sigqtest1/sigqtest1.c 152155 2005-11-07 14:10:33Z davidxu $ */ 2#include <signal.h> 3#include <stdio.h> 4#include <err.h> 5#include <errno.h> 6 7int received; 8 9void handler(int sig, siginfo_t *si, void *ctx) 10{ 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"); 15 received++; 16} 17 18int main() 19{ 20 struct sigaction sa; 21 union sigval val; 22 int ret; 23 int i; 24 sigset_t set; 25 26 sa.sa_flags = SA_SIGINFO; 27 sigemptyset(&sa.sa_mask); 28 sa.sa_sigaction = handler; 29 sigaction(SIGRTMIN, &sa, NULL); 30 sigemptyset(&set); 31 sigaddset(&set, SIGRTMIN); 32 sigprocmask(SIG_BLOCK, &set, NULL); 33 i = 0; 34 for (;;) { 35 val.sival_int = i; 36 ret = sigqueue(getpid(), SIGRTMIN, val); 37 if (ret == -1) { 38 if (errno != EAGAIN) { 39 errx(1, "errno != EAGAIN"); 40 } 41 break; 42 } 43 i++; 44 } 45 sigprocmask(SIG_UNBLOCK, &set, NULL); 46 if (received != i) 47 errx(1, "error, signal lost"); 48 printf("OK\n"); 49} 50