1 /* 2 * Copyright (c) 2002-2003, Intel Corporation. All rights reserved. 3 * Created by: salwan.searty REMOVE-THIS AT intel DOT com 4 * This file is licensed under the GPL license. For the full content 5 * of this license, see the COPYING file at the top level of this 6 * source tree. 7 8 This program tests the assertion that the lowest pending signal will be 9 selected by sigwaitinfo() if there are any multiple pending signals in the 10 range SIGRTMIN to SIGRTMAX. 11 12 Steps: 13 - Register for myhandler to be called when any signal between SIGRTMIN 14 and SIGRTMAX is generated, and make sure SA_SIGINFO is set. 15 - Also, make sure that all of these signals are added to the set that 16 will be passed to sigwaitinfo(). 17 - Block all of these signals from the process. 18 - Raise all of these signals using sigqueue. 19 - call sigwaitinfo() and verify that it returns SIGRTMIN 20 */ 21 22 #define _XOPEN_SOURCE 600 23 #define _XOPEN_REALTIME 1 24 25 #include <signal.h> 26 #include <stdio.h> 27 #include <unistd.h> 28 #include <stdlib.h> 29 #include <errno.h> 30 #include "posixtest.h" 31 32 void myhandler(int signo, siginfo_t * info, void *context) 33 { 34 printf("Inside dummy handler\n"); 35 } 36 37 int main(void) 38 { 39 int pid, rtsig; 40 union sigval value; 41 struct sigaction act; 42 sigset_t selectset; 43 44 act.sa_flags = SA_SIGINFO; 45 act.sa_sigaction = myhandler; 46 sigemptyset(&act.sa_mask); 47 sigemptyset(&selectset); 48 49 for (rtsig = SIGRTMAX; rtsig >= SIGRTMIN; rtsig--) { 50 sigaddset(&act.sa_mask, rtsig); 51 sighold(rtsig); 52 sigaddset(&selectset, rtsig); 53 } 54 55 pid = getpid(); 56 value.sival_int = 5; /* 5 is just an arbitrary value */ 57 58 for (rtsig = SIGRTMAX; rtsig >= SIGRTMIN; rtsig--) { 59 sigaction(rtsig, &act, 0); 60 if (sigqueue(pid, rtsig, value) != 0) { 61 printf 62 ("Test UNRESOLVED: call to sigqueue did not return success\n"); 63 return PTS_UNRESOLVED; 64 } 65 } 66 67 if (sigwaitinfo(&selectset, NULL) != SIGRTMIN) { 68 printf 69 ("Test FAILED: sigwaitinfo() did not return the lowest of the multiple pending signals between SIGRTMIN and SIGRTMAX\n"); 70 return PTS_FAIL; 71 } 72 73 return PTS_PASS; 74 } 75