Description

This issue may be badly implemented, but the reference to the VTable may be incorrect during a hot reload. Crash always in sample project.

 

Summary:

  • Call ForeachRow function in Custom Struct constructor.
  • Create Custom Struct with Custom Actor constructor.
  • Refer to Custom Struct and Custom Actor in DynamicDelegate of Custom GameMode.

 

Log:
The last output log causes a crash.

UE_CLOG (GIsRetrievingVTablePtr, LogCore, Fatal, TEXT ("We are currently retrieving VTable ptr. Please use FVTableHelper constructor instead."));

Workaround:
Crash when hot reloading with LiveCoding enabled. Using the previous hotreload only crashes.

Steps to Reproduce
  1. Open attached project in editor.
  2. Run hotreload with press "Compile" button in editor.

Result:

Crash in editor.

Expect:

Not occur crash.

 

Callstack
Fatal error: [File:G:/UnrealEngine-4.24/Engine/Source/Runtime/CoreUObject/Private/UObject/Obj.cpp] [Line: 101]
We are currently retrieving VTable ptr. Please use FVTableHelper constructor instead.

UObject::EnsureNotRetrievingVTablePtr::__l14::<lambda_18c0f8e221f431bccbcb63e93c98cc1d>::operator()() Line 101 C++
UObject::EnsureNotRetrievingVTablePtr() Line 101 C++
UObject::UObject(const FObjectInitializer & ObjectInitializer) Line 2528 C++
UField::{ctor}(const FObjectInitializer &) Line 63 C++
UStruct::{ctor}(const FObjectInitializer &) Line 593 C++
UFunction::UFunction(const FObjectInitializer & ObjectInitializer, UFunction * InSuperFunction, EFunctionFlags InFunctionFlags, unsigned __int64 ParamsSize) Line 4814 C++
UDelegateFunction::UDelegateFunction(const FObjectInitializer & ObjectInitializer, UFunction * InSuperFunction, EFunctionFlags InFunctionFlags, unsigned __int64 ParamsSize) Line 5303 C++
UE4CodeGen_Private::ConstructUFunction(UFunction * & OutFunction, const UE4CodeGen_Private::FFunctionParams & Params) Line 4384 C++
Z_Construct_UDelegateFunction_ConstructorTest_TestDelegate__DelegateSignature() Line 53 C++
UE4CodeGen_Private::ConstructUPackage(UPackage * & OutPackage, const UE4CodeGen_Private::FPackageParams & Params) Line 4508 C++
Z_Construct_UPackage__Script_ConstructorTest() Line 34 C++
FTestRow::StaticStruct() Line 96 C++
UDataTable::ForeachRow<FTestRow>(const wchar_t * ContextString, TFunctionRef<void __cdecl(FName const &,FTestRow const &)> Predicate) Line 245 C++
UDataTable::ForeachRow(const FString &) Line 262 C++
FTestStruct::LoadTable() Line 19 C++
FTestStruct::FTestStruct() Line 8 C++
ATestActor::ATestActor(FVTableHelper & Helper) Line 80 C++
UClass::HotReloadPrivateStaticClass(unsigned int InSize, EClassFlags InClassFlags, EClassCastFlags InClassCastFlags, const wchar_t * InConfigName, void(*)(const FObjectInitializer &) InClassConstructor, UObject *(*)(FVTableHelper &) InClassVTableHelperCtorCaller, void(*)(UObject *, FReferenceCollector &) InClassAddReferencedObjects, UClass * TClass_Super_StaticClass, UClass * TClass_WithinClass_StaticClass) Line 4335 C++
GetPrivateStaticClassBody(const wchar_t * PackageName, const wchar_t * Name, UClass * & ReturnClass, void(*)() RegisterNativeFunc, unsigned int InSize, unsigned int InAlignment, EClassFlags InClassFlags, EClassCastFlags InClassCastFlags, const wchar_t * InConfigName, void(*)(const FObjectInitializer &) InClassConstructor, UObject *(*)(FVTableHelper &) InClassVTableHelperCtorCaller, void(*)(UObject *, FReferenceCollector &) InClassAddReferencedObjects, UClass *(*)() InSuperClassFn, UClass *(*)() InWithinClassFn, bool bIsDynamic, void(*)(UDynamicClass *) InDynamicClassInitializerFn) Line 4727 C++
ATestActor::GetPrivateStaticClass() Line 74 C++
ATestActor::StaticClass() Line 14 C++
TClassCompiledInDefer<ATestActor>::Register() Line 336 C++
UClassRegisterAllCompiledInClasses() Line 827 C++
ProcessNewlyLoadedUObjects(FName Package, bool bCanProcessNewlyLoadedObjects) Line 1011 C++
UE4Tuple_Private::TTupleImpl<TIntegerSequence<unsigned int> >::ApplyAfter(void(*)(FName, bool) &) Line 285 C++
TBaseStaticDelegateInstance<TTypeWrapper<void> __cdecl(FName,bool)>::Execute(FName) Line 801 C++
TBaseStaticDelegateInstance<void __cdecl(FName,bool)>::ExecuteIfSafe(FName <Params_0>, bool <Params_1>) Line 854 C++
TBaseMulticastDelegate<void,FName,bool>::Broadcast(FName <Params_0>, bool <Params_1>) Line 1013 C++
FModuleManager::LoadModuleWithFailureReason(const FName InModuleName, EModuleLoadResult & OutFailureReason) Line 493 C++
FModuleManager::LoadModule(const FName InModuleName) Line 326 C++
FHotReloadModule::DoHotReloadInternal(const TMap<FName,FString,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<FName,FString,0> > & ChangedModules, const TArray<UPackage *,TSizedDefaultAllocator<32> > & Packages, const TArray<FName,TSizedDefaultAllocator<32> > & InDependentModules, FOutputDevice & HotReloadAr) Line 799 C++
FHotReloadModule::RebindPackagesInternal::__l2::<lambda_f06df2a1cf09763b899653811cdb8315>::operator()(const TMap<FName,FString,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<FName,FString,0> > &) Line 1161 C++
Invoke(FHotReloadModule::RebindPackagesInternal::__l2::<lambda_f06df2a1cf09763b899653811cdb8315> &) Line 45 C++
UE4Function_Private::TFunctionRefCaller<<lambda_f06df2a1cf09763b899653811cdb8315>,void __cdecl(TMap<FName,FString,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<FName,FString,0> > const &,bool,enum ECompilationResult::Type)>::Call(void * Obj, const TMap<FName,FString,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<FName,FString,0> > & <Params_0>, bool & <Params_1>, ECompilationResult::Type & <Params_2>) Line 549 C++
UE4Function_Private::TFunctionRefBase<UE4Function_Private::TFunctionStorage<0>,void __cdecl(TMap<FName,FString,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<FName,FString,0> > const &,bool,enum ECompilationResult::Type)>::operator()(const TMap<FName,FString,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<FName,FString,0> > & <Params_1>, bool <Params_2>, ECompilationResult::Type) Line 676 C++
FHotReloadModule::CheckForFinishedModuleDLLCompile(EHotReloadFlags Flags, bool & bCompileStillInProgress, bool & bCompileSucceeded, FOutputDevice & Ar, bool bFireEvents) Line 1868 C++
FHotReloadModule::Tick(float DeltaTime) Line 1427 C++
TBaseDelegate<bool,float>::Execute(float) Line 586 C++
FTicker::FElement::Fire(float) Line 127 C++
FTicker::Tick(float DeltaTime) Line 95 C++
FEngineLoop::Tick() Line 4686 C++
EngineTick() Line 62 C++
GuardedMain(const wchar_t * CmdLine, HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, int nCmdShow) Line 173 C++
WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 252 C++
[External Code]

Have Comments or More Details?

There's no existing public thread on this issue, so head over toAnswerHub just mention UE-91026 in the post.

0
Login to Vote

Won't Fix
ComponentCore
Affects Versions4.244.25
Target Fix n/a
CreatedMar 23, 2020
ResolvedMar 25, 2020
UpdatedMar 25, 2020