1 /* 2 * Copyright (c) 2002-2003, Intel Corporation. All rights reserved. 3 * Created by: rusty.lynch 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 Test case for assertion #8 of the sigaction system call that verifies 9 that if signals in the sa_mask (passed in the sigaction struct of the 10 sigaction function call) are added to the process signal mask during 11 execution of the signal-catching function. 12 */ 13 14 #include <signal.h> 15 #include <stdio.h> 16 #include <stdlib.h> 17 #include <sys/wait.h> 18 #include <unistd.h> 19 #include "posixtest.h" 20 21 int SIGUSR2_count = 0; 22 SIGUSR2_handler(int signo LTP_ATTRIBUTE_UNUSED)23void SIGUSR2_handler(int signo LTP_ATTRIBUTE_UNUSED) 24 { 25 SIGUSR2_count++; 26 } 27 SIGUSR1_handler(int signo LTP_ATTRIBUTE_UNUSED)28void SIGUSR1_handler(int signo LTP_ATTRIBUTE_UNUSED) 29 { 30 raise(SIGUSR2); 31 if (SIGUSR2_count) { 32 printf("Got SIGUSR2\nTest FAILED\n"); 33 exit(PTS_FAIL); 34 } 35 } 36 main(void)37int main(void) 38 { 39 struct sigaction act; 40 41 act.sa_handler = SIGUSR1_handler; 42 act.sa_flags = 0; 43 sigemptyset(&act.sa_mask); 44 sigaddset(&act.sa_mask, SIGUSR2); 45 46 if (sigaction(SIGUSR1, &act, 0) == -1) { 47 perror("Unexpected error while attempting to " 48 "setup test pre-conditions"); 49 return PTS_UNRESOLVED; 50 } 51 52 act.sa_handler = SIGUSR2_handler; 53 act.sa_flags = 0; 54 sigemptyset(&act.sa_mask); 55 56 if (sigaction(SIGUSR2, &act, 0) == -1) { 57 perror("Unexpected error while attempting to " 58 "setup test pre-conditions"); 59 return PTS_UNRESOLVED; 60 } 61 62 if (raise(SIGUSR1) == -1) { 63 perror("Unexpected error while attempting to " 64 "setup test pre-conditions"); 65 return PTS_UNRESOLVED; 66 } 67 68 printf("Test PASSED\n"); 69 return PTS_PASS; 70 } 71