We get this crash very sporadically when loading a map. It appears to be an edge case when garbage collection is running while this code is executing, as it ends up calling StaticFindObjectFast which may not be called while GC is running.
Call stack:
[Inline Frame] Svalinn.exe!UE::Logging::Private::BasicFatalLogV::__l2::<lambda>() Line 1599 C++
[Inline Frame] Svalinn.exe!UE::Logging::Private::BasicFatalLogV(const FLogCategoryBase & ProgramCounter, const UE::Logging::Private::FStaticBasicLogRecord *) Line 1599 C++
Svalinn.exe!UE::Logging::Private::BasicFatalLog(const FLogCategoryBase & Category, const UE::Logging::Private::FStaticBasicLogRecord * Log, …) Line 1609 C++
[Inline Frame] Svalinn.exe!StaticFindObjectFast(UClass * ObjectName, UObject *) Line 459 C++
Svalinn.exe!StaticFindObject(UClass * ObjectClass, UObject * InObjectPackage, const wchar_t * OrigInName, bool bExactClass) Line 601 C++
[Inline Frame] Svalinn.exe!FindObject(UObject *) Line 2014 C++
Svalinn.exe!ResolveName2(UObject * & InPackage, TStringBuilderBase<wchar_t> & InOutName, bool Create, bool Throw, unsigned int LoadFlags, const FLinkerInstancingContext * InstancingContext) Line 1253 C++
Svalinn.exe!StaticFindObject(UClass * ObjectClass, UObject * InObjectPackage, const wchar_t * OrigInName, bool bExactClass) Line 588 C++
[Inline Frame] Svalinn.exe!FindObject(UObject *) Line 2014 C++
Svalinn.exe!FSoftObjectPath::ResolveObjectInternal() Line 891 C++
[Inline Frame] Svalinn.exe!TPersistentObjectPtr<FSoftObjectPath>::Get() Line 128 C++
Svalinn.exe!TSoftObjectPtr<UPCGNode const>::Get() Line 1056 C++
> Svalinn.exe!FPCGGraphTask::LoadCookedData() Line 107 C++
Svalinn.exe!FPCGGraphCompiler::GetCompiledTasks(UPCGGraph * InGraph, unsigned int GenerationGridSize, FPCGStackContext & OutStackContext, bool bIsTopGraph) Line 1228 C++
Svalinn.exe!FPCGGraphExecutor::ScheduleGraph(const FPCGScheduleGraphParams & InParams) Line 293 C++
Svalinn.exe!FPCGContext::ScheduleGraph(const FPCGScheduleGraphParams & InParams) Line 582 C++
Svalinn.exe!FPCGLoopElement::ExecuteInternal(FPCGContext * InContext) Line 302 C++
Svalinn.exe!IPCGElement::Execute(FPCGContext * Context) Line 219 C++
Svalinn.exe!FPCGGraphExecutor::ExecuteScheduling::__l110::<lambda>() Line 1740 C++
[Inline Frame] Svalinn.exe!Invoke(FPCGGraphExecutor::ExecuteScheduling::__l110::void <lambda>(const TArray<FString,TSizedDefaultAllocator<32>> &, UWorld *, FOutputDevice &) &) Line 47 C++
Svalinn.exe!UE::Tasks::Private::TExecutableTaskBase<`FPCGGraphExecutor::ExecuteScheduling’::`110’::void <lambda>(const TArray<FString,TSizedDefaultAllocator<32>> &, UWorld *, FOutputDevice &),bool,void>::ExecuteTask() Line 875 C++
[Inline Frame] Svalinn.exe!UE::Trace::FChannel::operator|(const UE::Trace::FChannel & Rhs) Line 30 C++
[Inline Frame] Svalinn.exe!TaskTrace::FTaskTimingEventScope::{ctor}(unsigned __int64) Line 302 C++
Svalinn.exe!UE::Tasks::Private::FTaskBase::TryExecuteTask() Line 528 C++
[Inline Frame] Svalinn.exe!UE::Tasks::Private::FTaskBase::Init::__l2::<lambda>() Line 184 C++
[Inline Frame] Svalinn.exe!LowLevelTasks::FTask::Init::__l13::<lambda>(const bool) Line 499 C++
[Inline Frame] Svalinn.exe!Invoke(LowLevelTasks::FTask::Init::__l13::void <lambda>(const TArray<FString,TSizedDefaultAllocator<32>> &, UWorld *, FOutputDevice &) &) Line 47 C++
[Inline Frame] Svalinn.exe!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`UE::Tasks::Private::FTaskBase::Init’::`2’::void <lambda>(const TArray<FString,TSizedDefaultAllocator<32>> &, UWorld *, FOutputDevice &)>‘::`13’::void <lambda>(const TArray<FString,TSizedDefaultAllocator<32>> &, UWorld *, FOutputDevice &),0>::Call(void *) Line 162 C++
Svalinn.exe!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`UE::Tasks::Private::FTaskBase::Init’::`2’::void <lambda>(const TArray<FString,TSizedDefaultAllocator<32>> &, UWorld *, FOutputDevice &)>‘::`13’::void <lambda>(const TArray<FString,TSizedDefaultAllocator<32>> &, UWorld *, FOutputDevice &),0>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48> & Destination, void * InlineData, unsigned int DestInlineSize, bool <Params_0>) Line 171 C++
[Inline Frame] Svalinn.exe!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48> &) Line 309 C++
Svalinn.exe!LowLevelTasks::FTask::ExecuteTask() Line 627 C++
[Inline Frame] Svalinn.exe!FCpuProfilerTrace::FEventScope::{ctor}(unsigned int &) Line 197 C++
Svalinn.exe!LowLevelTasks::FScheduler::ExecuteTask(LowLevelTasks::FTask * InTask) Line 364 C++
[Inline Frame] Svalinn.exe!LowLevelTasks::FScheduler::TryExecuteTaskFrom(LowLevelTasks::Private::FWaitEvent *) Line 665 C++
Svalinn.exe!LowLevelTasks::FScheduler::WorkerLoop(LowLevelTasks::Private::FWaitEvent * WorkerEvent, LowLevelTasks::Private::TLocalQueueRegistry<1024,1024>::TLocalQueue * WorkerLocalQueue, unsigned int WaitCycles, bool bPermitBackgroundWork) Line 724 C++
[Inline Frame] Svalinn.exe!LowLevelTasks::FScheduler::WorkerMain(LowLevelTasks::Private::FWaitEvent * WorkerEvent, LowLevelTasks::Private::TLocalQueueRegistry<1024,1024>::TLocalQueue * WorkerLocalQueue, unsigned int WaitCycles, bool bPermitBackgroundWork) Line 783 C++
Svalinn.exe!LowLevelTasks::FScheduler::CreateWorker::__l2::<lambda>() Line 188 C++
[Inline Frame] Svalinn.exe!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::TFunctionStorage<1>,void __cdecl(void)>::operator()() Line 471 C++
Svalinn.exe!FThreadImpl::Run() Line 69 C++
Svalinn.exe!FRunnableThreadWin::Run() Line 159 C++
Svalinn.exe!FRunnableThreadWin::GuardedRun() Line 71 C++
Hey Ted, thanks for sharing. It looks like adding an FGCScopeGuard to PCGGraphTask::LoadCookedData will avoid this crash. It’s fixed now in 5.8, thanks again for bringing it to our attention!