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