Ensure that threads only process one pump task.

This is necessary because we will always deadlock if a thread takes on multiple pump tasks since pump tasks never return.

This means when using separate threads for certain systems (like physics or rendering), we need to be sure that there are enough threads to have at least one per system (to ensure forward progress).
This commit is contained in:
clayjohn 2025-07-16 23:31:35 -07:00
parent 7826b6b13f
commit 782b9e328c
6 changed files with 71 additions and 17 deletions

View file

@ -253,7 +253,7 @@ void RenderingServerDefault::init() {
if (create_thread) {
print_verbose("RenderingServerWrapMT: Starting render thread");
DisplayServer::get_singleton()->release_rendering_thread();
WorkerThreadPool::TaskID tid = WorkerThreadPool::get_singleton()->add_task(callable_mp(this, &RenderingServerDefault::_thread_loop), true);
WorkerThreadPool::TaskID tid = WorkerThreadPool::get_singleton()->add_task(callable_mp(this, &RenderingServerDefault::_thread_loop), true, "Rendering Server pump task", true);
command_queue.set_pump_task_id(tid);
command_queue.push(this, &RenderingServerDefault::_assign_mt_ids, tid);
command_queue.push_and_sync(this, &RenderingServerDefault::_init);