summaryrefslogtreecommitdiff
path: root/gdbserver_tests/passsigalrm.c
blob: a625eb6910a6b08dc1e4cd00c92f51157eb0b73e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
static int sigalrm_received = 0;

static void sigalrm_handler(int signr)
{
   sigalrm_received++;
}

int main (int argc, char *argv[])
{
   struct sigaction sa;
   fprintf(stderr, "starting ...\n");
   sa.sa_handler = sigalrm_handler;
   sigemptyset(&sa.sa_mask);
   sa.sa_flags = 0;

   if (sigaction (SIGALRM, &sa, NULL) != 0)
      perror("sigaction");
   if (kill(getpid(), SIGALRM) != 0)
      perror("kill 1");

   if (sigalrm_received == 1)
      fprintf (stderr, "ok: 1st SIGALRM received\n");
   else
      fprintf (stderr, "wrong 1st: unexpected value %d sigalrm_received\n",
               sigalrm_received);

   if (kill(getpid(), SIGALRM) != 0)
      perror("kill 2");

   if (sigalrm_received == 2)
      fprintf (stderr, "ok: 2nd SIGALRM received\n");
   else
      fprintf (stderr, "wrong 2nd: unexpected value %d sigalrm_received\n",
               sigalrm_received);

   return 0;
}