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 .is_worker = true
}; };
b32 abort = false; sys_mutex_lock(&G.mutex);
while (!abort) { while (true) {
sys_mutex_lock(&G.mutex); while (!G.workers_shutdown && !G.scheduled_work_head) {
{ sys_condition_variable_wait(&G.cv, &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);
}
/* Do work from top */ while (!G.workers_shutdown && G.scheduled_work_head) {
while (G.scheduled_work_head && !G.workers_shutdown) { struct work *work = G.scheduled_work_head;
struct work *work = G.scheduled_work_head; if (work) {
if (work) { __profscope(work_pool_task);
__profscope(work_pool_task); --G.idle_worker_count;
--G.idle_worker_count; work_exec_single_task_maybe_release_assume_locked(work);
work_exec_single_task_maybe_release_assume_locked((struct work *)work); ++G.idle_worker_count;
++G.idle_worker_count;
}
} }
} }
sys_mutex_unlock(&G.mutex);
if (G.workers_shutdown) {
sys_mutex_unlock(&G.mutex);
break;
}
} }
} }