summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorPedro J. Estébanez <pedrojrulez@gmail.com>2024-07-15 11:22:39 +0200
committerPedro J. Estébanez <pedrojrulez@gmail.com>2024-07-15 12:15:25 +0200
commit10b543f8a770970cac36a404f192a7f2c246894f (patch)
tree9d9d5a32a42cd2abb8697919773065bcc728df27 /core
parent62d9ce6445283d2bc1daa973350f91df56a826bf (diff)
downloadredot-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.cpp7
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;
}