worker loop cleanup

This commit is contained in:
jacob 2024-06-20 16:02:16 -05:00
parent 5ec253b4aa
commit d571a9647d

View File

@ -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 */
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) {
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((struct work *)work);
work_exec_single_task_maybe_release_assume_locked(work);
++G.idle_worker_count;
}
}
}
if (G.workers_shutdown) {
sys_mutex_unlock(&G.mutex);
break;
}
}
}