mc_translate.c: enable further uses of DLexpensive for scalar EQ/NE comparisons
[valgrind.git] / none / tests / pth_term_signal.c
blob9d8f05cc3077ddfcb3c916c4e4fc74dbe4fb9212
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <signal.h>
4 #include <pthread.h>
5 #include <assert.h>
7 #include <sys/wait.h>
9 void *
10 slavethread(void *arg)
12 sigset_t sigmask;
14 if (sigfillset(&sigmask))
16 fprintf(stderr, "Error line %u\n", __LINE__);
17 _exit(255);
20 if (pthread_sigmask(SIG_UNBLOCK, &sigmask, 0))
22 fprintf(stderr, "Error line %u\n", __LINE__);
23 _exit(255);
26 while (1)
27 sleep(1);
30 void
31 childprocess()
33 pthread_t slave;
35 if (pthread_create(&slave, 0, &slavethread, 0))
37 fprintf(stderr, "Error line %u\n", __LINE__);
38 _exit(255);
41 while (1)
42 sleep(1);
45 int main(int argc, char **argv)
47 sigset_t sigmask;
49 if (sigfillset(&sigmask))
51 fprintf(stderr, "Error line %u\n", __LINE__);
52 return 255;
55 if (pthread_sigmask(SIG_BLOCK, &sigmask, 0))
57 fprintf(stderr, "Error line %u\n", __LINE__);
58 return 255;
61 int childpid = fork();
63 if (-1 == childpid)
65 fprintf(stderr, "Error line %u\n", __LINE__);
66 return 255;
69 if ( ! childpid)
70 childprocess();
72 if (kill(childpid, SIGTERM))
74 fprintf(stderr, "Error line %u\n", __LINE__);
75 return 255;
78 int status;
79 if (childpid != waitpid(childpid, &status, 0))
81 fprintf(stderr, "Error line %u\n", __LINE__);
82 return 255;
85 assert(WIFSIGNALED(status));
87 fprintf(stderr, "Signal %d\n", WTERMSIG(status));
88 assert(WTERMSIG(status) == SIGTERM);
90 return 0;