Merge pull request #69679 from adamscott/fix-resourceloader-thread_load_tasks-crash

Fix `ResourceLoader::thread_load_tasks` crash
This commit is contained in:
Rémi Verschelde 2022-12-08 09:51:38 +01:00
commit b86a874e02
No known key found for this signature in database
GPG key ID: C3336907360768E1
3 changed files with 33 additions and 0 deletions

View file

@ -923,6 +923,35 @@ void ResourceLoader::clear_translation_remaps() {
}
}
void ResourceLoader::clear_thread_load_tasks() {
thread_load_mutex->lock();
for (KeyValue<String, ResourceLoader::ThreadLoadTask> &E : thread_load_tasks) {
switch (E.value.status) {
case ResourceLoader::ThreadLoadStatus::THREAD_LOAD_LOADED: {
E.value.resource = Ref<Resource>();
} break;
case ResourceLoader::ThreadLoadStatus::THREAD_LOAD_IN_PROGRESS: {
if (E.value.thread != nullptr) {
E.value.thread->wait_to_finish();
memdelete(E.value.thread);
E.value.thread = nullptr;
}
E.value.resource = Ref<Resource>();
} break;
case ResourceLoader::ThreadLoadStatus::THREAD_LOAD_FAILED:
default: {
// do nothing
}
}
}
thread_load_tasks.clear();
thread_load_mutex->unlock();
}
void ResourceLoader::load_path_remaps() {
if (!ProjectSettings::get_singleton()->has_setting("path_remap/remapped_paths")) {
return;

View file

@ -219,6 +219,8 @@ public:
static void load_translation_remaps();
static void clear_translation_remaps();
static void clear_thread_load_tasks();
static void set_load_callback(ResourceLoadedCallback p_callback);
static ResourceLoaderImport import;

View file

@ -3328,6 +3328,8 @@ void Main::cleanup(bool p_force) {
ResourceLoader::clear_translation_remaps();
ResourceLoader::clear_path_remaps();
ResourceLoader::clear_thread_load_tasks();
ScriptServer::finish_languages();
// Sync pending commands that may have been queued from a different thread during ScriptServer finalization