diff options
author | Pedro J. Estébanez <pedrojrulez@gmail.com> | 2024-07-15 11:22:39 +0200 |
---|---|---|
committer | Pedro J. Estébanez <pedrojrulez@gmail.com> | 2024-07-15 12:15:25 +0200 |
commit | 10b543f8a770970cac36a404f192a7f2c246894f (patch) | |
tree | 9d9d5a32a42cd2abb8697919773065bcc728df27 /core | |
parent | 62d9ce6445283d2bc1daa973350f91df56a826bf (diff) | |
download | redot-engine-10b543f8a770970cac36a404f192a7f2c246894f.tar.gz |
WorkerThreadPool: Fix wrong sync logic breaking task map integrity
Diffstat (limited to 'core')
-rw-r--r-- | core/object/worker_thread_pool.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/core/object/worker_thread_pool.cpp b/core/object/worker_thread_pool.cpp index caf4ed3835..0356da06d9 100644 --- a/core/object/worker_thread_pool.cpp +++ b/core/object/worker_thread_pool.cpp @@ -397,16 +397,17 @@ Error WorkerThreadPool::wait_for_task_completion(TaskID p_task_id) { task->waiting_user++; } - task_mutex.unlock(); - if (caller_pool_thread) { + task_mutex.unlock(); _wait_collaboratively(caller_pool_thread, task); + task_mutex.lock(); task->waiting_pool--; if (task->waiting_pool == 0 && task->waiting_user == 0) { tasks.erase(p_task_id); task_allocator.free(task); } } else { + task_mutex.unlock(); task->done_semaphore.wait(); task_mutex.lock(); task->waiting_user--; @@ -414,9 +415,9 @@ Error WorkerThreadPool::wait_for_task_completion(TaskID p_task_id) { tasks.erase(p_task_id); task_allocator.free(task); } - task_mutex.unlock(); } + task_mutex.unlock(); return OK; } |