brintos

brintos / llvm-project-archived public Read only

0
0
Text · 726 B · 6e3a2f5 Raw
38 lines · cpp
1// RUN: %clangxx_tsan -O1 %s -o %t && %env_tsan_opts=atexit_sleep_ms=50 %run %t 2>&1 | FileCheck %s2#include <pthread.h>3#include <stdio.h>4#include <stdlib.h>5#include <unistd.h>6#include <sys/types.h>7#include <sys/wait.h>8 9void foo() {10  fprintf(stderr, "CHILD ATEXIT\n");11}12 13void *worker(void *unused) {14  return 0;15}16 17int main() {18  pthread_t t;19  pthread_create(&t, NULL, worker, NULL);20  int pid = fork();21  if (pid == 0) {22    // child23    atexit(foo);24    fprintf(stderr, "CHILD DONE\n");25  } else {26    pthread_join(t, 0);27    if (waitpid(pid, 0, 0) == -1) {28      perror("waitpid");29      exit(1);30    }31    fprintf(stderr, "PARENT DONE\n");32  }33}34 35// CHECK: CHILD DONE36// CHECK: CHILD ATEXIT37// CHECK: PARENT DONE38