From c785a17ca8e54eb3c67f1aadc566ffa26db2226d Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Fri, 10 Feb 2023 11:27:01 +0100 Subject: [PATCH] Fix crash on exit due to remaining `DefautlInstance` objects --- Source/Engine/Scripting/BinaryModule.cpp | 14 ++++++++++++++ Source/Engine/Scripting/Scripting.cpp | 7 ------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Source/Engine/Scripting/BinaryModule.cpp b/Source/Engine/Scripting/BinaryModule.cpp index c26f9e13b..8d7991a2e 100644 --- a/Source/Engine/Scripting/BinaryModule.cpp +++ b/Source/Engine/Scripting/BinaryModule.cpp @@ -681,6 +681,16 @@ void* BinaryModule::FindMethod(const ScriptingTypeHandle& typeHandle, const Scri void BinaryModule::Destroy(bool isReloading) { + // Destroy any default script instances + for (const auto& type : Types) + { + if (type.Type == ScriptingTypes::Script && type.Script.DefaultInstance) + { + Delete(type.Script.DefaultInstance); + type.Script.DefaultInstance = nullptr; + } + } + // Unregister GetModules().RemoveKeepOrder(this); } @@ -1429,6 +1439,10 @@ void NativeBinaryModule::Destroy(bool isReloading) { ManagedBinaryModule::Destroy(isReloading); + // Skip native code unloading from core libs + if (this == GetBinaryModuleCorlib() || this == GetBinaryModuleFlaxEngine()) + return; + // Release native library const auto library = Library; if (library) diff --git a/Source/Engine/Scripting/Scripting.cpp b/Source/Engine/Scripting/Scripting.cpp index 28e544cd6..f1ac6922b 100644 --- a/Source/Engine/Scripting/Scripting.cpp +++ b/Source/Engine/Scripting/Scripting.cpp @@ -525,13 +525,6 @@ void Scripting::Release() for (int32 i = modules.Count() - 1; i >= 0; i--) { auto module = modules[i]; - if (module == GetBinaryModuleCorlib() || module == GetBinaryModuleFlaxEngine()) - { - // Just C# assembly unload for in-build modules - ((ManagedBinaryModule*)module)->Assembly->Unload(); - continue; - } - module->Destroy(false); } _nonNativeModules.ClearDelete();