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 SIGBUS_count = 0; 22 SIGBUS_handler(int signo)23void SIGBUS_handler(int signo) 24 { 25 SIGBUS_count++; 26 printf("Caught SIGBUS\n"); 27 } 28 SIGCHLD_handler(int signo)29void SIGCHLD_handler(int signo) 30 { 31 printf("Caught SIGCHLD\n"); 32 raise(SIGBUS); 33 if (SIGBUS_count) { 34 printf("Test FAILED\n"); 35 exit(-1); 36 } 37 } 38 main(void)39int main(void) 40 { 41 struct sigaction act; 42 43 act.sa_handler = SIGCHLD_handler; 44 act.sa_flags = 0; 45 sigemptyset(&act.sa_mask); 46 sigaddset(&act.sa_mask, SIGBUS); 47 if (sigaction(SIGCHLD, &act, 0) == -1) { 48 perror("Unexpected error while attempting to " 49 "setup test pre-conditions"); 50 return PTS_UNRESOLVED; 51 } 52 53 act.sa_handler = SIGBUS_handler; 54 act.sa_flags = 0; 55 sigemptyset(&act.sa_mask); 56 if (sigaction(SIGBUS, &act, 0) == -1) { 57 perror("Unexpected error while attempting to " 58 "setup test pre-conditions"); 59 return PTS_UNRESOLVED; 60 } 61 62 if (raise(SIGCHLD) == -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