tsan: deflake dlopen_static_tls.cpp
authorDmitry Vyukov <dvyukov@google.com>
Mon, 13 Dec 2021 08:28:42 +0000 (09:28 +0100)
committerDmitry Vyukov <dvyukov@google.com>
Mon, 13 Dec 2021 11:01:40 +0000 (12:01 +0100)
Currently the test calls dlclose in the thread
concurrently with the main thread calling a function
from the dynamic library. This is not good.
Wait for the main thread to call the function
before calling dlclose.

Depends on D115612.

Reviewed By: melver

Differential Revision: https://reviews.llvm.org/D115613

compiler-rt/test/tsan/Linux/dlopen_static_tls.cpp

index a53fc70..f97348d 100644 (file)
@@ -49,6 +49,7 @@ void *thread(void *arg) {
   barrier_wait(&barrier);
   if (__atomic_load_n(&ready, __ATOMIC_ACQUIRE))
     func();
+  barrier_wait(&barrier);
   if (dlclose(lib)) {
     printf("error in dlclose: %s\n", dlerror());
     exit(1);
@@ -73,6 +74,7 @@ int main(int argc, char *argv[]) {
   __atomic_store_n(&ready, 1, __ATOMIC_RELEASE);
   barrier_wait(&barrier);
   func();
+  barrier_wait(&barrier);
   pthread_join(th, 0);
   fprintf(stderr, "DONE\n");
   return 0;