]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/uclibc/lib/contrib/uclibc/test/malloc/tst-mallocfork.c
update
[l4.git] / l4 / pkg / uclibc / lib / contrib / uclibc / test / malloc / tst-mallocfork.c
1 /* Derived from the test case in
2    http://sourceware.org/bugzilla/show_bug.cgi?id=838.  */
3 #include <assert.h>
4 #include <errno.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <unistd.h>
8 #include <sys/types.h>
9 #include <sys/wait.h>
10
11 static void
12 sig_handler (int signum)
13 {
14   pid_t child = vfork ();
15   if (child == 0)
16     exit (0);
17   TEMP_FAILURE_RETRY (waitpid (child, NULL, 0));
18 }
19
20 static int
21 do_test (void)
22 {
23   pid_t parent = getpid ();
24
25   struct sigaction action = { .sa_handler = sig_handler };
26   sigemptyset (&action.sa_mask);
27
28   malloc (sizeof (int));
29
30   if (sigaction (SIGALRM, &action, NULL) != 0)
31     {
32       puts ("sigaction failed");
33       return 1;
34     }
35
36   /* Create a child that sends the signal to be caught.  */
37   pid_t child = vfork ();
38   if (child == 0)
39     {
40       if (kill (parent, SIGALRM) == -1)
41         perror ("kill");
42       exit (0);
43     }
44
45   TEMP_FAILURE_RETRY (waitpid (child, NULL, 0));
46
47   return 0;
48 }
49
50 #define TEST_FUNCTION do_test ()
51 #include "../test-skeleton.c"