[ASan/Win] Don't crash when ASAN_OPTIONS have disable_core=1
[blocksruntime.git] / test / tsan / fork_deadlock.cc
blobcc5b12214cf961cb7b66fc559557beaab4e34ca1
1 // RUN: %clangxx_tsan -O1 %s -o %t && TSAN_OPTIONS="atexit_sleep_ms=50" %run %t 2>&1 | FileCheck %s
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <errno.h>
5 #include <pthread.h>
6 #include <unistd.h>
7 #include <sys/types.h>
8 #include <sys/wait.h>
10 int counter;
12 static void *incrementer(void *p) {
13 for (;;)
14 __sync_fetch_and_add(&counter, 1);
15 return 0;
18 static void *watchdog(void *p) {
19 sleep(100);
20 fprintf(stderr, "timed out after 100 seconds\n");
21 exit(1);
22 return 0;
25 int main() {
26 pthread_t th1, th2;
27 pthread_create(&th1, 0, incrementer, 0);
28 pthread_create(&th2, 0, watchdog, 0);
29 for (int i = 0; i < 10; i++) {
30 switch (fork()) {
31 default: // parent
32 while (wait(0) < 0) {}
33 fprintf(stderr, ".");
34 break;
35 case 0: // child
36 __sync_fetch_and_add(&counter, 1);
37 exit(0);
38 break;
39 case -1: // error
40 fprintf(stderr, "failed to fork (%d)\n", errno);
41 exit(1);
44 fprintf(stderr, "OK\n");
47 // CHECK: OK