Fix crash on shutdown due to custom JsonAsset C++ instance
This commit is contained in:
@@ -263,6 +263,9 @@ Asset::LoadResult JsonAsset::loadAsset()
|
|||||||
Level::ScriptsReloaded.Bind<JsonAsset, &JsonAsset::OnScriptsReloaded>(this);
|
Level::ScriptsReloaded.Bind<JsonAsset, &JsonAsset::OnScriptsReloaded>(this);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Destroy instance on scripting shutdown (eg. asset from scripts)
|
||||||
|
Scripting::ScriptsUnload.Bind<JsonAsset, &JsonAsset::DeleteInstance>(this);
|
||||||
|
|
||||||
return LoadResult::Ok;
|
return LoadResult::Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,6 +275,7 @@ void JsonAsset::unload(bool isReloading)
|
|||||||
Level::ScriptsReloadStart.Unbind<JsonAsset, &JsonAsset::OnScriptsReloadStart>(this);
|
Level::ScriptsReloadStart.Unbind<JsonAsset, &JsonAsset::OnScriptsReloadStart>(this);
|
||||||
Level::ScriptsReloaded.Unbind<JsonAsset, &JsonAsset::OnScriptsReloaded>(this);
|
Level::ScriptsReloaded.Unbind<JsonAsset, &JsonAsset::OnScriptsReloaded>(this);
|
||||||
#endif
|
#endif
|
||||||
|
Scripting::ScriptsUnload.Unbind<JsonAsset, &JsonAsset::DeleteInstance>(this);
|
||||||
DeleteInstance();
|
DeleteInstance();
|
||||||
|
|
||||||
JsonAssetBase::unload(isReloading);
|
JsonAssetBase::unload(isReloading);
|
||||||
@@ -279,6 +283,8 @@ void JsonAsset::unload(bool isReloading)
|
|||||||
|
|
||||||
bool JsonAsset::CreateInstance()
|
bool JsonAsset::CreateInstance()
|
||||||
{
|
{
|
||||||
|
ScopeLock lock(Locker);
|
||||||
|
|
||||||
// Try to scripting type for this data
|
// Try to scripting type for this data
|
||||||
const StringAsANSI<> dataTypeNameAnsi(DataTypeName.Get(), DataTypeName.Length());
|
const StringAsANSI<> dataTypeNameAnsi(DataTypeName.Get(), DataTypeName.Length());
|
||||||
const auto typeHandle = Scripting::FindScriptingType(StringAnsiView(dataTypeNameAnsi.Get(), DataTypeName.Length()));
|
const auto typeHandle = Scripting::FindScriptingType(StringAnsiView(dataTypeNameAnsi.Get(), DataTypeName.Length()));
|
||||||
@@ -320,6 +326,8 @@ bool JsonAsset::CreateInstance()
|
|||||||
|
|
||||||
void JsonAsset::DeleteInstance()
|
void JsonAsset::DeleteInstance()
|
||||||
{
|
{
|
||||||
|
ScopeLock lock(Locker);
|
||||||
|
|
||||||
// C# instance
|
// C# instance
|
||||||
if (MObject* object = GetManagedInstance())
|
if (MObject* object = GetManagedInstance())
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user