1
0
mirror of https://github.com/godotengine/godot.git synced 2026-01-04 19:21:46 +00:00

Merge pull request #104060 from bruvzg/resloader_ids

Fix `Invalid Task ID` errors in `ResourceLoader`.
This commit is contained in:
Rémi Verschelde
2025-03-14 00:08:59 +01:00

View File

@@ -264,6 +264,14 @@ void ResourceLoader::LoadToken::clear() {
thread_load_tasks.erase(local_path);
}
local_path.clear(); // Mark as already cleared.
if (task_to_await) {
for (KeyValue<String, ResourceLoader::ThreadLoadTask> &E : thread_load_tasks) {
if (E.value.task_id == task_to_await) {
task_to_await = 0;
break; // Same task is reused by nested loads, do not wait for completion here.
}
}
}
}
}
@@ -829,6 +837,12 @@ Ref<Resource> ResourceLoader::_load_complete_inner(LoadToken &p_load_token, Erro
p_thread_load_lock.temp_relock();
load_task.awaited = true;
// Mark nested loads with the same task id as awaited.
for (KeyValue<String, ResourceLoader::ThreadLoadTask> &E : thread_load_tasks) {
if (E.value.task_id == load_task.task_id) {
E.value.awaited = true;
}
}
DEV_ASSERT(load_task.status == THREAD_LOAD_FAILED || load_task.status == THREAD_LOAD_LOADED);
} else if (load_task.need_wait) {