Fix continuous attempt to reload domain with API assemblies out of sync

This commit is contained in:
Ignacio Etcheverry 2018-07-25 21:54:21 +02:00
parent f1130f9a8a
commit 762c912e8e
1 changed files with 26 additions and 20 deletions

View File

@ -638,35 +638,41 @@ void CSharpLanguage::reload_tool_script(const Ref<Script> &p_script, bool p_soft
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
void CSharpLanguage::reload_assemblies_if_needed(bool p_soft_reload) { 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"); String name = ProjectSettings::get_singleton()->get("application/config/name");
if (name.empty()) { if (name.empty()) {
name = "UnnamedProject"; name = "UnnamedProject";
} }
name += ".dll"; name += ".dll";
if (proj_assembly) { if (proj_assembly) {
String proj_asm_path = proj_assembly->get_path(); String proj_asm_path = proj_assembly->get_path();
if (!FileAccess::exists(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 // 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); proj_asm_path = GodotSharpDirs::get_res_temp_assemblies_dir().plus_file(name);
if (!FileAccess::exists(proj_asm_path)) 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 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 #ifndef NO_THREADS
lock->lock(); lock->lock();
#endif #endif