diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp index e32298596e1..aad1bf49dbe 100644 --- a/modules/mono/csharp_script.cpp +++ b/modules/mono/csharp_script.cpp @@ -2730,6 +2730,7 @@ void CSharpScript::_clear() { tool = false; valid = false; + reload_invalidated = true; base = NULL; native = NULL; @@ -2843,6 +2844,7 @@ void CSharpScript::initialize_for_managed_type(Ref p_script, GDMon p_script->valid = true; p_script->tool = p_script->script_class->has_attribute(CACHED_CLASS(ToolAttribute)); + p_script->reload_invalidated = false; if (!p_script->tool) { GDMonoClass *nesting_class = p_script->script_class->get_nesting_class(); @@ -3153,14 +3155,12 @@ MethodInfo CSharpScript::get_method_info(const StringName &p_method) const { } Error CSharpScript::reload(bool p_keep_state) { - - bool has_instances; - { - MutexLock lock(CSharpLanguage::get_singleton()->script_instances_mutex); - has_instances = instances.size(); + if (!reload_invalidated) { + return OK; } - - ERR_FAIL_COND_V(!p_keep_state && has_instances, ERR_ALREADY_IN_USE); + // In the case of C#, reload doesn't really do any script reloading. + // That's done separately via domain reloading. + reload_invalidated = false; GD_MONO_SCOPE_THREAD_ATTACH; diff --git a/modules/mono/csharp_script.h b/modules/mono/csharp_script.h index 1a5aff587a9..98c0c7a353c 100644 --- a/modules/mono/csharp_script.h +++ b/modules/mono/csharp_script.h @@ -75,6 +75,7 @@ class CSharpScript : public Script { bool tool; bool valid; + bool reload_invalidated; bool builtin;