summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2015-08-18 23:29:59 +0000
committerEric Fiselier <eric@efcs.ca>2015-08-18 23:29:59 +0000
commit10967a6ea6a8b92ce18e37da77be48fe7f6f54d7 (patch)
treeaccec306a4dfa89b01809c203a335f9f0a216115 /libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp
parentd4c8f70ce182a5bf31ce697aba232b6541ff5450 (diff)
downloadbcm5719-llvm-10967a6ea6a8b92ce18e37da77be48fe7f6f54d7.tar.gz
bcm5719-llvm-10967a6ea6a8b92ce18e37da77be48fe7f6f54d7.zip
[libcxx] Add Atomic test helper and fix TSAN failures.
Summary: This patch attempts to fix the last 3 TSAN failures on the libc++ bot (http://lab.llvm.org:8011/builders/libcxx-libcxxabi-x86_64-linux-ubuntu-tsan/builds/143). This patch also adds a `Atomic` test type that can be used where `<atomic>` cannot. `wait.exception.pass.cpp` and `wait_for.exception.pass.cpp` were failing because the test replaced `std::terminate` with `std::exit`. `std::exit` would asynchronously run the TLS and static destructors and this would cause a race condition. See PR22606 and D8802 for more details. This is fixed by using `_Exit` to prevent cleanup. `notify_all_at_thread_exit.pass.cpp` exercises the same race condition but for different reasons. I fixed this test by manually joining the thread before beginning program termination. Reviewers: EricWF, mclow.lists Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D11046 llvm-svn: 245389
Diffstat (limited to 'libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp')
-rw-r--r--libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp
index 6236a13df80..1341e90a885 100644
--- a/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp
+++ b/libcxx/test/std/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp
@@ -20,12 +20,13 @@
#include <thread>
#include <cassert>
+#include "test_atomic.h"
+
std::condition_variable cv;
std::mutex mut;
-int test0 = 0;
-int test1 = 0;
-int test2 = 0;
+AtomicInt test1(0);
+AtomicInt test2(0);
void f1()
{
@@ -64,11 +65,13 @@ int main()
}
if (test1 == 2)
{
+ assert(test2 == 1);
t1.join();
test1 = 0;
}
else if (test2 == 2)
{
+ assert(test1 == 1);
t2.join();
test2 = 0;
}
@@ -81,11 +84,13 @@ int main()
}
if (test1 == 2)
{
+ assert(test2 == 0);
t1.join();
test1 = 0;
}
else if (test2 == 2)
{
+ assert(test1 == 0);
t2.join();
test2 = 0;
}
OpenPOWER on IntegriCloud