Fix continuous attempt to reload domain with API assemblies out of sync
(cherry picked from commit 762c912e8e
)
This commit is contained in:
parent
fc678567d7
commit
1a325e3580
1 changed files with 26 additions and 20 deletions
|
@ -640,35 +640,41 @@ void CSharpLanguage::reload_tool_script(const Ref<Script> &p_script, bool p_soft
|
|||
#ifdef TOOLS_ENABLED
|
||||
void CSharpLanguage::reload_assemblies_if_needed(bool p_soft_reload) {
|
||||
|
||||
if (gdmono->is_runtime_initialized()) {
|
||||
if (!gdmono->is_runtime_initialized())
|
||||
return;
|
||||
|
||||
GDMonoAssembly *proj_assembly = gdmono->get_project_assembly();
|
||||
GDMonoAssembly *proj_assembly = gdmono->get_project_assembly();
|
||||
|
||||
String name = ProjectSettings::get_singleton()->get("application/config/name");
|
||||
if (name.empty()) {
|
||||
name = "UnnamedProject";
|
||||
}
|
||||
String name = ProjectSettings::get_singleton()->get("application/config/name");
|
||||
if (name.empty()) {
|
||||
name = "UnnamedProject";
|
||||
}
|
||||
|
||||
name += ".dll";
|
||||
name += ".dll";
|
||||
|
||||
if (proj_assembly) {
|
||||
String proj_asm_path = proj_assembly->get_path();
|
||||
if (proj_assembly) {
|
||||
String proj_asm_path = proj_assembly->get_path();
|
||||
|
||||
if (!FileAccess::exists(proj_assembly->get_path())) {
|
||||
// Maybe it wasn't loaded from the default path, so check this as well
|
||||
proj_asm_path = GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(name);
|
||||
if (!FileAccess::exists(proj_asm_path))
|
||||
return; // No assembly to load
|
||||
}
|
||||
|
||||
if (FileAccess::get_modified_time(proj_asm_path) <= proj_assembly->get_modified_time())
|
||||
return; // Already up to date
|
||||
} else {
|
||||
if (!FileAccess::exists(GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(name)))
|
||||
if (!FileAccess::exists(proj_assembly->get_path())) {
|
||||
// Maybe it wasn't loaded from the default path, so check this as well
|
||||
proj_asm_path = GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(name);
|
||||
if (!FileAccess::exists(proj_asm_path))
|
||||
return; // No assembly to load
|
||||
}
|
||||
|
||||
if (FileAccess::get_modified_time(proj_asm_path) <= proj_assembly->get_modified_time())
|
||||
return; // Already up to date
|
||||
} else {
|
||||
if (!FileAccess::exists(GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(name)))
|
||||
return; // No assembly to load
|
||||
}
|
||||
|
||||
if (!gdmono->get_core_api_assembly() && gdmono->metadata_is_api_assembly_invalidated(APIAssembly::API_CORE))
|
||||
return; // The core API assembly to load is invalidated
|
||||
|
||||
if (!gdmono->get_editor_api_assembly() && gdmono->metadata_is_api_assembly_invalidated(APIAssembly::API_EDITOR))
|
||||
return; // The editor API assembly to load is invalidated
|
||||
|
||||
#ifndef NO_THREADS
|
||||
lock->lock();
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue