annotate compiler-rt/test/tsan/fork_atexit.cpp @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 1d019706d866
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clangxx_tsan -O1 %s -o %t && %env_tsan_opts=atexit_sleep_ms=50 %run %t 2>&1 | FileCheck %s
anatofuz
parents:
diff changeset
2 #include <pthread.h>
anatofuz
parents:
diff changeset
3 #include <stdio.h>
anatofuz
parents:
diff changeset
4 #include <stdlib.h>
anatofuz
parents:
diff changeset
5 #include <unistd.h>
anatofuz
parents:
diff changeset
6 #include <sys/types.h>
anatofuz
parents:
diff changeset
7 #include <sys/wait.h>
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 void foo() {
anatofuz
parents:
diff changeset
10 fprintf(stderr, "CHILD ATEXIT\n");
anatofuz
parents:
diff changeset
11 }
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 void *worker(void *unused) {
anatofuz
parents:
diff changeset
14 return 0;
anatofuz
parents:
diff changeset
15 }
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 int main() {
anatofuz
parents:
diff changeset
18 pthread_t t;
anatofuz
parents:
diff changeset
19 pthread_create(&t, NULL, worker, NULL);
anatofuz
parents:
diff changeset
20 int pid = fork();
anatofuz
parents:
diff changeset
21 if (pid == 0) {
anatofuz
parents:
diff changeset
22 // child
anatofuz
parents:
diff changeset
23 atexit(foo);
anatofuz
parents:
diff changeset
24 fprintf(stderr, "CHILD DONE\n");
anatofuz
parents:
diff changeset
25 } else {
anatofuz
parents:
diff changeset
26 pthread_join(t, 0);
anatofuz
parents:
diff changeset
27 if (waitpid(pid, 0, 0) == -1) {
anatofuz
parents:
diff changeset
28 perror("waitpid");
anatofuz
parents:
diff changeset
29 exit(1);
anatofuz
parents:
diff changeset
30 }
anatofuz
parents:
diff changeset
31 fprintf(stderr, "PARENT DONE\n");
anatofuz
parents:
diff changeset
32 }
anatofuz
parents:
diff changeset
33 }
anatofuz
parents:
diff changeset
34
anatofuz
parents:
diff changeset
35 // CHECK: CHILD DONE
anatofuz
parents:
diff changeset
36 // CHECK: CHILD ATEXIT
anatofuz
parents:
diff changeset
37 // CHECK: PARENT DONE