Fix crash when spawning managed object on a detached native thread
This commit is contained in:
@@ -14,7 +14,7 @@
|
|||||||
#include "ManagedCLR/MClass.h"
|
#include "ManagedCLR/MClass.h"
|
||||||
#include "ManagedCLR/MUtils.h"
|
#include "ManagedCLR/MUtils.h"
|
||||||
#include "ManagedCLR/MField.h"
|
#include "ManagedCLR/MField.h"
|
||||||
#if PLATFORM_LINUX
|
#if PLATFORM_LINUX || USE_MONO
|
||||||
#include "ManagedCLR/MCore.h"
|
#include "ManagedCLR/MCore.h"
|
||||||
#endif
|
#endif
|
||||||
#include "FlaxEngine.Gen.h"
|
#include "FlaxEngine.Gen.h"
|
||||||
@@ -235,8 +235,16 @@ MonoObject* ScriptingObject::CreateManagedInternal()
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure to have managed domain attached (this can be called from custom native thread, eg. content loader)
|
||||||
|
auto domain = mono_domain_get();
|
||||||
|
if (!domain)
|
||||||
|
{
|
||||||
|
MCore::AttachThread();
|
||||||
|
domain = mono_domain_get();
|
||||||
|
}
|
||||||
|
|
||||||
// Allocate managed instance
|
// Allocate managed instance
|
||||||
MonoObject* managedInstance = mono_object_new(mono_domain_get(), monoClass->GetNative());
|
MonoObject* managedInstance = mono_object_new(domain, monoClass->GetNative());
|
||||||
if (managedInstance == nullptr)
|
if (managedInstance == nullptr)
|
||||||
{
|
{
|
||||||
LOG(Warning, "Failed to create new instance of the object of type {0}", String(monoClass->GetFullName()));
|
LOG(Warning, "Failed to create new instance of the object of type {0}", String(monoClass->GetFullName()));
|
||||||
|
|||||||
Reference in New Issue
Block a user