Hi Cody,
Sure, this is the callstack we found creating the BodySetup on the renderthread worker threads
> Project.self![Inline Function] UWidgetComponent::UpdateBodySetup::__unnamed_type_a4d3179b::operator()() Line 1938 + 0x2C bytes C++ Project.self!UWidgetComponent::UpdateBodySetup(bool bDrawSizeChanged) Line 1938 C++ Project.self!UWidgetComponent::GetBodySetup() Line 898 C++ Project.self![Inline Function] FWidget3DSceneProxy::FWidget3DSceneProxy(UWidgetComponent* InComponent, ISlate3DRenderer& InRenderer) Line 326 + 0x9 bytes C++ Project.self![Inline Function] FWidget3DSceneProxy::FWidget3DSceneProxy(UWidgetComponent* InComponent, ISlate3DRenderer& InRenderer) Line 327 C++ Project.self!UWidgetComponent::CreateSceneProxy() Line 802 C++ 0x00000010C24E8E00 C++ [Frames below may be incorrect and/or missing] Project.self!FActorPrimitiveComponentInterface::CreateSceneProxy() Line 5245 C++ Project.self!FScene::BatchAddPrimitivesInternal<UPrimitiveComponent>(TArrayView<UPrimitiveComponent*,int> InPrimitives) Line 1902 + 0x11 bytes C++ Project.self!FScene::AddPrimitive(UPrimitiveComponent* Primitive) Line 1803 + 0xA bytes C++ Project.self![Inline Function] FRegisterComponentContext::Process::__unnamed_type_748f4a87::operator()(int32 Index) Line 151 + 0xC bytes C++ Project.self![Inline Function] Invoke<(anon_class:0xAB7A7EC3ECC340D4)&,int>(FRegisterComponentContext::Process::__unnamed_type_748f4a87& Func, int&& Args) Line 47 C++ Project.self!UE::Core::Private::Function::TFunctionRefCaller<(anon_class:0xAB7A7EC3ECC340D4),void,int>::Call(void* Obj, int& Params) Line 315 C++ Project.self!ParallelForImpl::ParallelForInternal<TFunctionRef<void(int)>,(anon_class:0xF277747EE68159C4),decltype(nullptr)>::FParallelExecutor::operator()(const bool bIsMaster) Line 351 C++ Project.self!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask*(bool),48u>::TTaskDelegateImpl<(anon_class:0x636C2295001D02F9),false>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask*(bool),48u>::ThisClass& Destination, void* InlineData, uint32 DestInlineSize, bool Params) Line 172 C++ Project.self![Inline Function] LowLevelTasks::FTask::ExecuteTask() Line 630 C++ Project.self!LowLevelTasks::FScheduler::ExecuteTask(LowLevelTasks::FTask* InTask) Line 245 C++ Project.self![Inline Function] LowLevelTasks::FScheduler::TryExecuteTaskFrom<LowLevelTasks::Private::TLocalQueueRegistry<1024u,1024u>::TLocalQueue(illegal_value)(LowLevelTasks::Private::FWaitEvent* WaitEvent, LowLevelTasks::Private::TLocalQueueRegistry<1024u,1024u>::TLocalQueue* Queue, LowLevelTasks::Private::FOutOfWork& OutOfWork) Line 457 + 0x8 bytes C++ Project.self!LowLevelTasks::FScheduler::WorkerLoop(LowLevelTasks::Private::FWaitEvent* WorkerEvent, LowLevelTasks::FSchedulerTls::FLocalQueueType* WorkerLocalQueue, uint32 WaitCycles, bool bPermitBackgroundWork) Line 513 C++ Project.self!LowLevelTasks::FScheduler::WorkerMain(LowLevelTasks::Private::FWaitEvent* WorkerEvent, LowLevelTasks::FSchedulerTls::FLocalQueueType* WorkerLocalQueue, uint32 WaitCycles, bool bPermitBackgroundWork) Line 571 + 0xC bytes C++ Project.self!UE::Core::Private::Function::TFunctionRefCaller<(anon_class:0xD68B9870FAFC0A51),void>::Call(void* Obj) Line 321 C++ Project.self!FThreadImpl::Run() Line 68 C++ Project.self!FRunnableThreadPThread::Run() Line 27 C++ Project.self!FRunnableThreadPThread::_ThreadProc(void* pThis) Line 188 C++
For us we were loading and unloading the level containing the widget component actor multiple times, sometimes the level would not get the chance to fully load/unload before toggling the level’s load state. This seems to be the cause, almost seems like a race condition although in our case it caused a 100% repro