瀏覽代碼

C# script reload fixed

Co-authored-by: Michael Bickel <[email protected]>
(cherry picked from commit 84a218d346a2fd311abe55d6f189f0fe7bd4e7b9)
Germanrc 4 年之前
父節點
當前提交
aa679b2fe0
共有 2 個文件被更改,包括 8 次插入7 次删除
  1. 7 7
      modules/mono/csharp_script.cpp
  2. 1 0
      modules/mono/csharp_script.h

+ 7 - 7
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<CSharpScript> 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;
 

+ 1 - 0
modules/mono/csharp_script.h

@@ -75,6 +75,7 @@ class CSharpScript : public Script {
 
 	bool tool;
 	bool valid;
+	bool reload_invalidated;
 
 	bool builtin;