From d3264520afc9ec8d0c0fd4d53b5516d7eefbcfa5 Mon Sep 17 00:00:00 2001 From: Relintai Date: Thu, 15 Jun 2023 00:03:59 +0200 Subject: [PATCH] Fix crash. --- csharp_script.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/csharp_script.cpp b/csharp_script.cpp index 09fc779..7886cf6 100644 --- a/csharp_script.cpp +++ b/csharp_script.cpp @@ -32,20 +32,20 @@ #include +#include "core/config/project_settings.h" #include "core/io/json.h" #include "core/os/file_access.h" #include "core/os/os.h" #include "core/os/thread.h" -#include "core/config/project_settings.h" #ifdef TOOLS_ENABLED #include "core/os/keyboard.h" #include "editor/bindings_generator.h" #include "editor/csharp_project.h" +#include "editor/editor_inspector.h" #include "editor/editor_node.h" #include "editor/editor_settings.h" #include "editor/node_dock.h" -#include "editor/editor_inspector.h" #endif #ifdef DEBUG_METHODS_ENABLED @@ -1057,8 +1057,20 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) { // Call OnAfterDeserialization CSharpInstance *csi = CAST_CSHARP_INSTANCE(obj->get_script_instance()); - if (csi && csi->script->script_class->implements_interface(CACHED_CLASS(ISerializationListener))) - obj->get_script_instance()->call_multilevel(string_names.on_after_deserialize); + + if (csi) { + if (!csi->script.is_valid()) { + continue; + } + + if (!csi->script->script_class) { + continue; + } + + if (csi->script->script_class->implements_interface(CACHED_CLASS(ISerializationListener))) { + obj->get_script_instance()->call_multilevel(string_names.on_after_deserialize); + } + } } script->pending_reload_instances.clear(); @@ -2827,7 +2839,7 @@ Ref CSharpScript::create_for_managed_type(GDMonoClass *p_class, GD CRASH_COND(p_class == NULL); // TODO OPTIMIZE: Cache the 'CSharpScript' associated with this 'p_class' instead of allocating a new one every time - Ref script = memnew(CSharpScript); + Ref script = Ref(memnew(CSharpScript)); initialize_for_managed_type(script, p_class, p_native);