[libcxx] [test] Fix spurious failures in the thread join test on Windows
authorMartin Storsjö <martin@martin.st>
Wed, 7 Jul 2021 21:06:08 +0000 (21:06 +0000)
committerMartin Storsjö <martin@martin.st>
Mon, 12 Jul 2021 20:31:53 +0000 (23:31 +0300)
Make sure that the detached thread has started up before exiting
the process.

This is exactly the same fix as D105592, with the same pattern
being present in a different test case.

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

libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.member/join.pass.cpp

index 184b931..2286f74 100644 (file)
 #include <cstdlib>
 #include <cassert>
 #include <system_error>
+#include <atomic>
 
 #include "make_test_thread.h"
 #include "test_macros.h"
 
+std::atomic_bool done(false);
+
 class G
 {
     int alive_;
@@ -45,7 +48,7 @@ public:
 int G::n_alive = 0;
 bool G::op_run = false;
 
-void foo() {}
+void foo() { done = true; }
 
 int main(int, char**)
 {
@@ -72,6 +75,11 @@ int main(int, char**)
             assert(false);
         } catch (std::system_error const&) {
         }
+        // Wait to make sure that the detached thread has started up.
+        // Without this, we could exit main and start destructing global
+        // resources that are needed when the thread starts up, while the
+        // detached thread would start up only later.
+        while (!done) {}
     }
 #endif