1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * Copyright (c) International Business Machines Corp., 2001
4 * Author: Wayne Boyer
5 *
6 * Test Description:
7 * By the SIGALRM signal, check whether the previously specified alarm request
8 * was cleared in the child process or not.
9 */
10
11 #include <unistd.h>
12 #include <stdlib.h>
13 #include <errno.h>
14 #include <signal.h>
15
16 #include "tst_test.h"
17
18 static volatile int alarm_cnt = 0;
19
verify_alarm(void)20 static void verify_alarm(void)
21 {
22 pid_t pid;
23 alarm_cnt = 0;
24
25 TEST(alarm(1));
26 pid = SAFE_FORK();
27
28 sleep(3);
29
30 if (pid == 0) {
31 if (alarm_cnt == 0) {
32 tst_res(TPASS, "alarm() request cleared in child");
33 } else {
34 tst_res(TFAIL, "alarm() request not cleared in "
35 "child; alarms received:%d", alarm_cnt);
36 }
37 exit(0);
38 }
39
40 if (alarm_cnt != 1)
41 tst_res(TFAIL, "Sigalarms in parent %i, expected 1", alarm_cnt);
42 else
43 tst_res(TPASS, "Got 1 sigalarm in parent");
44 }
45
sighandler(int sig LTP_ATTRIBUTE_UNUSED)46 static void sighandler(int sig LTP_ATTRIBUTE_UNUSED)
47 {
48 alarm_cnt++;
49 }
50
setup(void)51 static void setup(void)
52 {
53 SAFE_SIGNAL(SIGALRM, sighandler);
54 }
55
56 static struct tst_test test = {
57 .test_all = verify_alarm,
58 .setup = setup,
59 .forks_child = 1,
60 };
61