summaryrefslogtreecommitdiff
path: root/test/buildtool/multithreading/task_system.test.cpp
diff options
context:
space:
mode:
authorOliver Reiche <oliver.reiche@huawei.com>2021-10-22 15:50:47 +0200
committerOliver Reiche <oliver.reiche@huawei.com>2022-07-06 18:49:49 +0200
commita71a4b5015327b15fb0bb4fea16c43f21ef0616c (patch)
tree10596e9c89659845c7cc6d3bf632a07fe407af86 /test/buildtool/multithreading/task_system.test.cpp
parentdc1129c79931d4391c3bcf6b629758fab7038219 (diff)
downloadjustbuild-a71a4b5015327b15fb0bb4fea16c43f21ef0616c.tar.gz
TaskSystem: Fix early shutdown
... conceptually, it was possible that a previous task decrements the `num_threads_running_` counter before it is incremented by the next task. Therefore, we have to unify the queue and thread status in a single counter (`total_workload_`) and ensure that woken threads increment it before decrementing it for popping a queue.
Diffstat (limited to 'test/buildtool/multithreading/task_system.test.cpp')
-rw-r--r--test/buildtool/multithreading/task_system.test.cpp13
1 files changed, 5 insertions, 8 deletions
diff --git a/test/buildtool/multithreading/task_system.test.cpp b/test/buildtool/multithreading/task_system.test.cpp
index 21e1ca6e..d34e3e4b 100644
--- a/test/buildtool/multithreading/task_system.test.cpp
+++ b/test/buildtool/multithreading/task_system.test.cpp
@@ -174,14 +174,11 @@ TEST_CASE("All threads run until work is done", "[task_system]") {
// Wait some time for all threads to go to sleep.
std::this_thread::sleep_for(1s);
- // Run singe task that creates the actual store tasks. All threads
- // should stay alive until their corresponding queue is filled.
- ts.QueueTask([&ts, &store_id] {
- // One task per thread (assumes round-robin push to queues).
- for (std::size_t i{}; i < ts.NumberOfThreads(); ++i) {
- ts.QueueTask([&store_id] { store_id(); });
- }
- });
+ // All threads should stay alive until their corresponding queue is
+ // filled. One task per thread (assumes round-robin push to queues).
+ for (std::size_t i{}; i < ts.NumberOfThreads(); ++i) {
+ ts.QueueTask([&store_id] { store_id(); });
+ }
}
CHECK(tids.size() == kNumThreads);
}