15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
201e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov#include <pthread.h>
301e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov#include <stdio.h>
401e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov#include <unistd.h>
501e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov
601e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukovint fds[2];
701e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov
801e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukovvoid *Thread1(void *x) {
901e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov  write(fds[1], "a", 1);
1001e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov  return NULL;
1101e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov}
1201e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov
1301e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukovvoid *Thread2(void *x) {
1401e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov  sleep(1);
1501e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov  close(fds[0]);
1601e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov  close(fds[1]);
1701e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov  return NULL;
1801e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov}
1901e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov
2001e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukovint main() {
2101e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov  pipe(fds);
2201e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov  pthread_t t[2];
2301e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov  pthread_create(&t[0], NULL, Thread1, NULL);
2401e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov  pthread_create(&t[1], NULL, Thread2, NULL);
2501e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov  pthread_join(t[0], NULL);
2601e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov  pthread_join(t[1], NULL);
2701e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov}
2801e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov
2901e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov// CHECK: WARNING: ThreadSanitizer: data race
30ba3ae356e0827bfdb17feaff53e17c3934470404Dmitry Vyukov// CHECK:   Write of size 8
3101e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov// CHECK:     #0 close
3201e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov// CHECK:     #1 Thread2
33ba3ae356e0827bfdb17feaff53e17c3934470404Dmitry Vyukov// CHECK:   Previous read of size 8
3401e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov// CHECK:     #0 write
3501e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov// CHECK:     #1 Thread1
3601e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov
3701e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov
38