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 if SA_SIGINFO is not set, then the
9 signal shall be received at least once
10
11 Steps:
12 - Register for myhandler to be called when SIGTOTEST is called, and make
13   sure SA_SIGINFO is NOT SET.
14 - Block signal SIGTOTEST from the process.
15 - Using sigqueue(), send NUMCALLS instances of SIGTOTEST to the current
16   process.
17 - Verify that the handler is executed at least once AFTER SIGTOTEST
18   is unblocked.
19 */
20
21#define _XOPEN_SOURCE 600
22#define _XOPEN_REALTIME 1
23#define SIGTOTEST SIGRTMIN
24#define NUMCALLS 5
25
26#include <signal.h>
27#include <stdio.h>
28#include <unistd.h>
29#include <stdlib.h>
30#include <errno.h>
31#include "posixtest.h"
32
33int counter = 0;
34
35void myhandler(int signo)
36{
37	counter++;
38}
39
40int main(void)
41{
42	int pid, i;
43	union sigval value;
44	struct sigaction act;
45
46	act.sa_handler = myhandler;
47	act.sa_flags = 0;
48	sigemptyset(&act.sa_mask);
49	sigaction(SIGTOTEST, &act, 0);
50
51	value.sival_int = 0;	/* 0 is just an arbitrary value */
52	pid = getpid();
53
54	sighold(SIGTOTEST);
55
56	for (i = 0; i < NUMCALLS; i++) {
57		if (sigqueue(pid, SIGTOTEST, value) != 0) {
58			printf
59			    ("Test UNRESOLVED: call to sigqueue did not return success\n");
60			return PTS_UNRESOLVED;
61		}
62	}
63
64	if (0 != counter) {
65		printf
66		    ("Test UNRESOLVED: handler called even though %d has not been removed from the signal mask\n",
67		     SIGTOTEST);
68		return PTS_UNRESOLVED;
69	}
70
71	sigrelse(SIGTOTEST);
72
73	if (counter < 1) {
74		printf("Test FAILED: %d was not received even once\n",
75		       SIGTOTEST);
76		return PTS_FAIL;
77	}
78	printf("Test PASSED: %d was received %d times.\n", SIGTOTEST, counter);
79	return PTS_PASS;
80}
81