Преглед на файлове

C# script reload fixed

Co-authored-by: Michael Bickel <[email protected]>
Co-authored-by: Germanrc <[email protected]>
Raul Santos преди 3 години
родител
ревизия
4a339dc8fd
променени са 2 файла, в които са добавени 8 реда и са изтрити 5 реда
  1. 7 5
      modules/mono/csharp_script.cpp
  2. 1 0
      modules/mono/csharp_script.h

+ 7 - 5
modules/mono/csharp_script.cpp

@@ -3009,6 +3009,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);
 
@@ -3365,13 +3366,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;
 
@@ -3558,6 +3559,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;