aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-08-26 21:30:23 +0100
committergingerBill <bill@gingerbill.org>2021-08-26 21:30:23 +0100
commitac191bd31f2983942e297beba077484ba58922f4 (patch)
tree45ea19933e48a23abab0c4302c9c3115d2ce9be4
parentad3a3547d61b3576a9b0841510669d0f102f9ccf (diff)
Simplify logic for `-thread-count:1`
-rw-r--r--src/checker.cpp20
-rw-r--r--src/thread_pool.cpp8
2 files changed, 8 insertions, 20 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index ebd5956c2..c93837321 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -4149,17 +4149,6 @@ void check_with_workers(Checker *c, WorkerTaskProc *proc, isize total_count) {
semaphore_post(&c->info.collect_semaphore, cast(i32)thread_count);
- if (worker_count == 0) {
- ThreadProcCheckerSection section_all = {};
- section_all.checker = c;
- section_all.offset = 0;
- section_all.count = total_count;
- Thread dummy_main_thread = {};
- dummy_main_thread.user_data = &section_all;
- proc(&dummy_main_thread);
- return;
- }
-
isize file_load_count = (total_count+thread_count-1)/thread_count;
isize remaining_count = total_count;
@@ -4764,15 +4753,6 @@ void check_procedure_bodies(Checker *c) {
u32 worker_count = thread_count-1; // NOTE(bill): The main thread will also be used for work
if (!build_context.threaded_checker) {
worker_count = 0;
-
- auto *q = &c->procs_to_check_queue;
- ProcInfo *pi = nullptr;
- while (mpmc_dequeue(q, &pi)) {
- consume_proc_info_queue(c, pi, q, nullptr);
- }
-
- debugf("Total Procedure Bodies Checked: %td\n", total_bodies_checked.load(std::memory_order_relaxed));
- return;
}
global_procedure_body_in_worker_queue = true;
diff --git a/src/thread_pool.cpp b/src/thread_pool.cpp
index b0357996c..a8bc327e5 100644
--- a/src/thread_pool.cpp
+++ b/src/thread_pool.cpp
@@ -104,6 +104,14 @@ void thread_pool_do_task(WorkerTask *task) {
}
void thread_pool_wait(ThreadPool *pool) {
+ if (pool->threads.count == 0) {
+ while (!thread_pool_queue_empty(pool)) {
+ thread_pool_do_task(thread_pool_queue_pop(pool));
+ --pool->ready;
+ }
+ GB_ASSERT(pool->ready == 0);
+ return;
+ }
for (;;) {
mutex_lock(&pool->mutex);