[PATCH] D11046: [libcxx] Add Atomic test helper and fix TSAN failures.

Eric Fiselier eric at efcs.ca
Wed Jul 8 16:05:18 PDT 2015


EricWF created this revision.
EricWF added a reviewer: mclow.lists.
EricWF added a subscriber: cfe-commits.

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.

http://reviews.llvm.org/D11046

Files:
  test/std/thread/thread.condition/notify_all_at_thread_exit.pass.cpp
  test/std/thread/thread.condition/thread.condition.condvarany/wait.exception.pass.cpp
  test/std/thread/thread.condition/thread.condition.condvarany/wait_for.exception.pass.cpp
  test/std/thread/thread.condition/thread.condition.condvarany/wait_terminates.sh.cpp
  test/support/test_atomic.h

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D11046.29291.patch
Type: text/x-patch
Size: 10666 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150708/5f2e2fe9/attachment.bin>


More information about the cfe-commits mailing list