Fix `ResourceLoader::thread_load_tasks` crash
This commit is contained in:
parent
a7937fe54c
commit
4a16b8630e
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue