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
21int SIGTERM_count = 0;
22
23void SIGTERM_handler(int signo)
24{
25	SIGTERM_count++;
26	printf("Caught SIGTERM\n");
27}
28
29void SIGTSTP_handler(int signo)
30{
31	printf("Caught SIGTSTP\n");
32	raise(SIGTERM);
33	if (SIGTERM_count) {
34		printf("Test FAILED\n");
35		exit(-1);
36	}
37}
38
39int main()
40{
41	struct sigaction act;
42
43	act.sa_handler = SIGTSTP_handler;
44	act.sa_flags = 0;
45	sigemptyset(&act.sa_mask);
46	sigaddset(&act.sa_mask, SIGTERM);
47	if (sigaction(SIGTSTP,  &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 = SIGTERM_handler;
54	act.sa_flags = 0;
55	sigemptyset(&act.sa_mask);
56	if (sigaction(SIGTERM,  &act, 0) == -1) {
57		perror("Unexpected error while attempting to "
58		       "setup test pre-conditions");
59		return PTS_UNRESOLVED;
60	}
61
62
63	if (raise(SIGTSTP) == -1) {
64		perror("Unexpected error while attempting to "
65		       "setup test pre-conditions");
66		return PTS_UNRESOLVED;
67	}
68
69
70	printf("Test PASSED\n");
71	return PTS_PASS;
72}
73
74