Browse Source

Merge pull request #55679 from raulsntos/script_reload_fix

C# scripts reload in editor fixed
Ignacio Roldán Etcheverry 3 years ago
parent
commit
e527687e1e
2 changed files with 8 additions and 5 deletions
  1. 7 5
      modules/mono/csharp_script.cpp
  2. 1 0
      modules/mono/csharp_script.h

+ 7 - 5
modules/mono/csharp_script.cpp

@@ -2995,6 +2995,7 @@ void CSharpScript::initialize_for_managed_type(Ref<CSharpScript> p_script, GDMon
 	CRASH_COND(p_script->native == nullptr);
 
 	p_script->valid = true;
+	p_script->reload_invalidated = false;
 
 	update_script_class_info(p_script);
 
@@ -3351,13 +3352,13 @@ 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;
 
@@ -3544,6 +3545,7 @@ void CSharpScript::_update_name() {
 void CSharpScript::_clear() {
 	tool = false;
 	valid = false;
+	reload_invalidated = true;
 
 	base = nullptr;
 	native = nullptr;

+ 1 - 0
modules/mono/csharp_script.h

@@ -101,6 +101,7 @@ private:
 
 	bool tool = false;
 	bool valid = false;
+	bool reload_invalidated = false;
 
 	bool builtin;