Fix crash on shutdown due to custom JsonAsset C++ instance
This commit is contained in:
committed by
Wojtek Figat
parent
c553859c3b
commit
66b452e90c
@@ -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())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user