Fix crash on shutdown due to custom JsonAsset C++ instance

This commit is contained in:
Wojciech Figat
2022-09-13 12:55:14 +02:00
committed by Wojtek Figat
parent c553859c3b
commit 66b452e90c

View File

@@ -247,6 +247,9 @@ Asset::LoadResult JsonAsset::loadAsset()
Level::ScriptsReloaded.Bind<JsonAsset, &JsonAsset::OnScriptsReloaded>(this);
#endif
// Destroy instance on scripting shutdown (eg. asset from scripts)
Scripting::ScriptsUnload.Bind<JsonAsset, &JsonAsset::DeleteInstance>(this);
return LoadResult::Ok;
}
@@ -256,6 +259,7 @@ void JsonAsset::unload(bool isReloading)
Level::ScriptsReloadStart.Unbind<JsonAsset, &JsonAsset::OnScriptsReloadStart>(this);
Level::ScriptsReloaded.Unbind<JsonAsset, &JsonAsset::OnScriptsReloaded>(this);
#endif
Scripting::ScriptsUnload.Unbind<JsonAsset, &JsonAsset::DeleteInstance>(this);
DeleteInstance();
JsonAssetBase::unload(isReloading);
@@ -263,6 +267,8 @@ void JsonAsset::unload(bool isReloading)
bool JsonAsset::CreateInstance()
{
ScopeLock lock(Locker);
// Try to scripting type for this data
const StringAsANSI<> dataTypeNameAnsi(DataTypeName.Get(), DataTypeName.Length());
const auto typeHandle = Scripting::FindScriptingType(StringAnsiView(dataTypeNameAnsi.Get(), DataTypeName.Length()));
@@ -304,6 +310,8 @@ bool JsonAsset::CreateInstance()
void JsonAsset::DeleteInstance()
{
ScopeLock lock(Locker);
// C# instance
if (MObject* object = GetManagedInstance())
{