From d571a9647d3715fd910c81457d30a5032b729390 Mon Sep 17 00:00:00 2001 From: jacob Date: Thu, 20 Jun 2024 16:02:16 -0500 Subject: [PATCH] worker loop cleanup --- src/work.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/src/work.c b/src/work.c index ee642b28..40d0f401 100644 --- a/src/work.c +++ b/src/work.c @@ -391,31 +391,26 @@ INTERNAL SYS_THREAD_ENTRY_POINT_FUNC_DEF(worker_thread_entry_point, thread_data) .is_worker = true }; - b32 abort = false; - while (!abort) { - sys_mutex_lock(&G.mutex); - { - /* Check for exit */ - if (G.workers_shutdown) { - /* Exit thread */ - abort = true; - } else if (!G.scheduled_work_head) { - /* Wait for work */ - sys_condition_variable_wait(&G.cv, &G.mutex); - } + sys_mutex_lock(&G.mutex); + while (true) { + while (!G.workers_shutdown && !G.scheduled_work_head) { + sys_condition_variable_wait(&G.cv, &G.mutex); + } - /* Do work from top */ - while (G.scheduled_work_head && !G.workers_shutdown) { - struct work *work = G.scheduled_work_head; - if (work) { - __profscope(work_pool_task); - --G.idle_worker_count; - work_exec_single_task_maybe_release_assume_locked((struct work *)work); - ++G.idle_worker_count; - } + while (!G.workers_shutdown && G.scheduled_work_head) { + struct work *work = G.scheduled_work_head; + if (work) { + __profscope(work_pool_task); + --G.idle_worker_count; + work_exec_single_task_maybe_release_assume_locked(work); + ++G.idle_worker_count; } } - sys_mutex_unlock(&G.mutex); + + if (G.workers_shutdown) { + sys_mutex_unlock(&G.mutex); + break; + } } }