2.9
[glibc/nacl-glibc.git] / malloc / tst-mallocfork.c
blobf90ce948873dda590e33d867c808b2589b831e62
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>
11 static void
12 sig_handler (int signum)
14 pid_t child = fork ();
15 if (child == 0)
16 exit (0);
17 TEMP_FAILURE_RETRY (waitpid (child, NULL, 0));
20 static int
21 do_test (void)
23 pid_t parent = getpid ();
25 struct sigaction action = { .sa_handler = sig_handler };
26 sigemptyset (&action.sa_mask);
28 malloc (sizeof (int));
30 if (sigaction (SIGALRM, &action, NULL) != 0)
32 puts ("sigaction failed");
33 return 1;
36 /* Create a child that sends the signal to be caught. */
37 pid_t child = fork ();
38 if (child == 0)
40 if (kill (parent, SIGALRM) == -1)
41 perror ("kill");
42 exit (0);
45 TEMP_FAILURE_RETRY (waitpid (child, NULL, 0));
47 return 0;
50 #define TEST_FUNCTION do_test ()
51 #include "../test-skeleton.c"