Commit b0527554 by FritzFlorian

Fix: handle thread sanitizer logfile correctly.

parent a1256f23
Pipeline #1091 failed with stages
in 2 minutes 5 seconds
image: "ubuntu:latest" image: "madduci/docker-linux-cpp:latest"
stages: stages:
- build - build
...@@ -27,4 +27,4 @@ run_thread_sanitizer: ...@@ -27,4 +27,4 @@ run_thread_sanitizer:
./ci_scripts/run_thread_sanitizer.sh ./ci_scripts/run_thread_sanitizer.sh
artifacts: artifacts:
paths: paths:
- "./cmake-build-release-thread-sanitizer/sanitizer.log.*" - sanitizer.log.*
#!/usr/bin/env bash #!/usr/bin/env bash
mkdir cmake-build-release-thread-sanitizer mkdir cmake-build-release-thread-sanitizer
cd cmake-build-release cd cmake-build-release-thread-sanitizer
cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DTHREAD_SANITIZER=ON cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DTHREAD_SANITIZER=ON
make make
...@@ -10,7 +10,7 @@ TSAN_OPTIONS="log_path=sanitizer.log exitcode=1" ./bin/tests ...@@ -10,7 +10,7 @@ TSAN_OPTIONS="log_path=sanitizer.log exitcode=1" ./bin/tests
STATUS_CODE=$? STATUS_CODE=$?
# rename the output log... # rename the output log...
mv sanitizer.log.* sanitizer.log mv sanitizer.log.* ../sanitizer.log
touch sanitizer.log touch sanitizer.log
exit $STATUS_CODE exit $STATUS_CODE
...@@ -7,6 +7,8 @@ using namespace pls::internal::base; ...@@ -7,6 +7,8 @@ using namespace pls::internal::base;
using namespace std; using namespace std;
static bool visited; static bool visited;
static int local_value_1;
static vector<int> local_value_two;
TEST_CASE( "thread creation and joining", "[internal/base/thread.h]") { TEST_CASE( "thread creation and joining", "[internal/base/thread.h]") {
visited = false; visited = false;
...@@ -18,10 +20,13 @@ TEST_CASE( "thread creation and joining", "[internal/base/thread.h]") { ...@@ -18,10 +20,13 @@ TEST_CASE( "thread creation and joining", "[internal/base/thread.h]") {
} }
TEST_CASE( "thread state", "[internal/base/thread.h]") { TEST_CASE( "thread state", "[internal/base/thread.h]") {
auto t1 = create_thread([]() { REQUIRE(*this_thread::state<int>() == 1); }, 1); auto t1 = create_thread([]() { local_value_1 = *this_thread::state<int>(); }, 1);
auto t2 = create_thread([]() { REQUIRE(*this_thread::state<vector<int>>() == vector<int>{1, 2}); }, vector<int>{1, 2}); auto t2 = create_thread([]() { local_value_two = *this_thread::state<vector<int>>(); }, vector<int>{1, 2});
t1.start(); t1.start();
t2.start(); t2.start();
t1.join(); t1.join();
t2.join(); t2.join();
REQUIRE(local_value_1 == 1);
REQUIRE(local_value_two == vector<int>{1, 2});
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment