|
@@ -772,6 +772,10 @@ Ref<Resource> ResourceLoader::_load_complete(LoadToken &p_load_token, Error *r_e
|
|
|
return _load_complete_inner(p_load_token, r_error, thread_load_lock);
|
|
|
}
|
|
|
|
|
|
+void ResourceLoader::set_is_import_thread(bool p_import_thread) {
|
|
|
+ import_thread = p_import_thread;
|
|
|
+}
|
|
|
+
|
|
|
Ref<Resource> ResourceLoader::_load_complete_inner(LoadToken &p_load_token, Error *r_error, MutexLock<SafeBinaryMutex<BINARY_MUTEX_TAG>> &p_thread_load_lock) {
|
|
|
if (r_error) {
|
|
|
*r_error = OK;
|
|
@@ -886,9 +890,11 @@ Ref<Resource> ResourceLoader::_load_complete_inner(LoadToken &p_load_token, Erro
|
|
|
MessageQueue::get_main_singleton()->push_callable(callable_mp(rcc.source, &Resource::connect_changed).bind(rcc.callable, rcc.flags));
|
|
|
}
|
|
|
}
|
|
|
- core_bind::Semaphore done;
|
|
|
- MessageQueue::get_main_singleton()->push_callable(callable_mp(&done, &core_bind::Semaphore::post).bind(1));
|
|
|
- done.wait();
|
|
|
+ if (!import_thread) { // Main thread is blocked by initial resource reimport, do not wait.
|
|
|
+ core_bind::Semaphore done;
|
|
|
+ MessageQueue::get_main_singleton()->push_callable(callable_mp(&done, &core_bind::Semaphore::post).bind(1));
|
|
|
+ done.wait();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1565,6 +1571,7 @@ bool ResourceLoader::create_missing_resources_if_class_unavailable = false;
|
|
|
bool ResourceLoader::abort_on_missing_resource = true;
|
|
|
bool ResourceLoader::timestamp_on_load = false;
|
|
|
|
|
|
+thread_local bool ResourceLoader::import_thread = false;
|
|
|
thread_local int ResourceLoader::load_nesting = 0;
|
|
|
thread_local Vector<String> ResourceLoader::load_paths_stack;
|
|
|
thread_local HashMap<int, HashMap<String, Ref<Resource>>> ResourceLoader::res_ref_overrides;
|