From 46d475b067dcab6929fa76d1aad9bc6b9453e22b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Wed, 1 Mar 2023 11:11:40 +0100 Subject: Fix crash in resource load (cherry picked from commit 047671df0f6a7a300b83f36b5d6110a8165b0dfd) --- core/io/resource_loader.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'core') diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp index c47f297a72..d0448e86fc 100644 --- a/core/io/resource_loader.cpp +++ b/core/io/resource_loader.cpp @@ -492,13 +492,21 @@ Ref ResourceLoader::load_threaded_get(const String &p_path, Error *r_e print_lt("GET: load count: " + itos(thread_loading_count) + " / wait count: " + itos(thread_waiting_count) + " / suspended count: " + itos(thread_suspended_count) + " / active: " + itos(thread_loading_count - thread_suspended_count)); } + bool still_valid = true; + bool was_thread = load_task.thread; do { load_task.cond_var->wait(thread_load_lock); + if (!thread_load_tasks.has(local_path)) { //may have been erased during unlock and this was always an invalid call + still_valid = false; + break; + } } while (load_task.cond_var); // In case of spurious wakeup. - thread_suspended_count--; + if (was_thread) { + thread_suspended_count--; + } - if (!thread_load_tasks.has(local_path)) { //may have been erased during unlock and this was always an invalid call + if (!still_valid) { if (r_error) { *r_error = ERR_INVALID_PARAMETER; } -- cgit v1.2.3