Bug 497723 - forgot to restore callgrind output cleanup
[valgrind.git] / memcheck / tests / freebsd / eventfd1.c
blob91f148f5f821285393a195dca3d334312edb9a04
1 #include <sys/eventfd.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4 #include <stdio.h>
6 #define handle_error(msg) \
7 do { \
8 perror(msg); \
9 exit(EXIT_FAILURE); \
10 } while (0)
12 int
13 main(int argc, char *argv[])
15 eventfd_t u;
16 int efd, j;
17 int error;
19 if (argc < 2) {
20 fprintf(stderr, "Usage: %s <num>...\n", argv[0]);
21 exit(EXIT_FAILURE);
24 efd = eventfd(0, EFD_CLOEXEC);
25 if (efd == -1)
26 handle_error("eventfd");
28 switch (fork()) {
29 case 0:
30 for (j = 1; j < argc; j++) {
31 printf("Child writing %s to efd\n", argv[j]);
32 u = strtoull(argv[j], NULL, 0);
34 error = eventfd_write(efd, u);
35 if (error != 0)
36 handle_error("write");
38 printf("Child completed write loop\n");
40 exit(EXIT_SUCCESS);
42 default:
43 sleep(2);
45 printf("Parent about to read\n");
46 error = eventfd_read(efd, &u);
47 if (error != 0)
48 handle_error("read");
49 printf("Parent read %llu (0x%llx) from efd\n",
50 (unsigned long long) u, (unsigned long long) u);
51 exit(EXIT_SUCCESS);
53 case -1:
55 handle_error("fork");