mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
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:
parent
7826b6b13f
commit
782b9e328c
6 changed files with 71 additions and 17 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue