llvm-project/compiler-rt/test/tsan/fd_close_race.cpp
Dmitry Vyukov f831d6fc80 tsan: fix false positive during fd close
FdClose is a subjet to the same atomicity problem as MemoryRangeFreed
(memory state is not "monotoic" wrt race detection).
So we need to lock the thread slot in FdClose the same way we do
in MemoryRangeFreed.
This fixes the modified stress.cpp test.

Reviewed By: vitalybuka, melver

Differential Revision: https://reviews.llvm.org/D121143
2022-03-08 10:40:56 +01:00

27 lines
573 B
C++

// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
#include "test.h"
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
void *Thread(void *arg) {
char buf;
read((long)arg, &buf, 1);
barrier_wait(&barrier);
return NULL;
}
int main() {
barrier_init(&barrier, 2);
int fd = open("/dev/random", O_RDONLY);
pthread_t t;
pthread_create(&t, NULL, Thread, (void *)(long)fd);
barrier_wait(&barrier);
close(fd);
pthread_join(t, NULL);
fprintf(stderr, "DONE\n");
}
// CHECK: WARNING: ThreadSanitizer: data race
// CHECK: DONE