Loading is stuck, flush will never finish

Hello, our Linux-Shipping dedicated server has run into the `Loading is stuck, flush will never finish` assert a handful of times in our production environment - we have not been able to reproduce it in testing locally (through wsl with the same build/env). Our project’s Engine source is based on //UE5/Release-5.5/… @ 38445549.

I’ve read through the other UDN posts with the same assert and [Content removed] seems similar. We have all of the CLs listed 33195963, 33422841, 33482098, 33509912, except for 38213095 (which looks did not make it to Release-5.5). lldb is showing FAsyncLoadingThread2::PendingIoRequestsCounter == 0, so maybe not IO starved anyway.

We also enabled FAsyncPackage2::DumpState/Impl (same as ALT2_DUMP_STATE_ON_HANG from 38266785) but when the server hits that the first SyncLoadContext->RequestedPackages it reads into garbage and crashes so we don’t have the full set of package loading state info. The core dumps we have show different FAsyncLoadingThread2::PendingRequests and FAsyncLoadingThread2::SyncLoadContext so there doesn’t seem to be a clear package referencing cycle.

I noticed 38297526 added ScriptObjectsLock to protect read/write to ScriptObjects but it didn’t land in Release-5.5 and I didn’t find the listed jira UE-162836 on the public tracker, could it be related?

Please let me know if I can provide any more info, I’m happy to dig through our core dumps for info if that would help triage.

-blake

Hi Blake,

UE-162836 is a catch-all for all the work we’re doing to make async loading in editor possible. So that change shouldn’t be required on your side.

Loading is stuck reports uses a simple timeout… is it possible the timeout is not enough in some case?

When there is a crash in DumpState, it is generally when parts of the loader are still active, which can cause race conditions with the DumpState code that assumes the loader is really stuck and is not modifying structures anymore.

You could try bumping the s.StallDetectorTimeout and see if the issues goes away?

Hope this helps,

Danny

Hey Danny, thanks for the reply.

Our shipping server map load times are not close to the currently configured 120 second timeout- increasing this timeout without first verifying async loading is working as expected is not an option.

If I understand correctly the DumpState crash is expected if async loading is still active? Is there a known set of debugging instrumentation or logs that are valid to be called at any point during async loading so we can enable those in our prod environment?

Here is some state from one of our cores which leads me to think there’s something unexpected happening:

(lldb) f frame #3: 0x00000000052e35d5 Server-Linux-ShippingFAsyncLoadingThread2::FlushLoading(this=0x00007fa0c60b59c0, RequestIDs=TConstArrayView @ 0x000057172ced7e40) at AsyncLoading2.cpp:9991:7

(lldb) p PendingRequests
(TSet) size=1 {
[0] = -1
}

(lldb) p RequestIdToPackageMap
(TMap<int, FAsyncPackage2 *>) size=1 {
[0] = {
UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int, 0U, 1U>, int, FAsyncPackage2 *> = {
UE::Core::Private::Tuple::TTupleBaseElement<int, 0, 2> = (Key = -1)
UE::Core::Private::Tuple::TTupleBaseElement<FAsyncPackage2 *, 1, 2> = {
Value = 0x00007fa05ecaf520
}
}
}
}

(lldb) p RequestIDs
(TConstArrayView) {
DataPtr = 0x00007fa05313aa80
ArrayNum = 95
}
[ 119, 120, .., 213 ]

(lldb) p SyncLoadContext->RequestIDs
(TArray<int, TSizedInlineAllocator<4, 32> >) size=95 {
[ 119, 120, .., 213 ]

(lldb) p SyncLoadContext->RequestedPackages
(TArray<FAsyncPackage2 *, TSizedInlineAllocator<4, 32> >) size=95 {
ArrayNum = 95
[0] = nullptr
[1] = 0x00007fa05ecaf520

}

(lldb) p ((FAsyncPackage2*)0x00007fa05ecaf520)->Desc
(FAsyncPackageDesc2) {
RequestID = 120

while (IsAsyncLoadingPackages()) // → return PackagesWithRemainingWorkCounter != 0; (lldb) p PackagesWithRemainingWorkCounter == 12
{
bool bDidSomething = false;
EAsyncPackageState::Type Result = TickAsyncLoadingFromGameThread(*GameThreadState, false, false, 0.0, RequestIDs, bDidSomething);
if (RequestIDs.Num() != 0 && !ContainsAnyRequestID(RequestIDs)) <— 1. // ContainsAnyRequestID → return Algo::AnyOf(RequestIDs, [this](int32 RequestID) { return PendingRequests.Contains(RequestID); });
{
break; // 2. no break here
}

if (!bDidSomething)
{

if (LastActivity == 0.0) // LastActivity != 0

else if (FPlatformTime::Seconds() - LastActivity > GStallDetectorTimeout && ++IdleLoopCount > GStallDetectorIdleLoops) // haven’t bDidSomething for >120seconds and checked at >50 times
{

// TConstArrayView RequestIDs = .Num = 95, .Data = [ 119, 120, .., 213 ]
// TSet PendingRequests = .Num = 1, .Data = [ -1 ]

UE_LOG(LogStreaming, Fatal, TEXT(“Loading is stuck, flush will never finish”)); <— 3. rip
}
}`If I’m reading this correctly: at 1. both RequestIDs.Num > 0 && PendingRequest matches an element in RequestIDs but when we assert at 3. in the same loop PendingRequests has been changed which is suspicious.

While PendingRequests[0] = -1 and RequestIdToPackageMap[-1] = 0x00007fa05ecaf520, the package at 0x00007fa05ecaf520 Desc::RequestID = 120 which matches the SyncLoadContext->RequestID[1] = 120 and SyncLoadContext->RequestedPackages[1] = 0x00007fa05ecaf520. Is this a valid state for PendingRequests? Is SyncLoadContext->RequestedPackages[0] = nullptr expected?

Please let me know if I can provide anymore info,

-blake

No having a RequestedPackage == nullptr is not normal, if you look at

FAsyncLoadingThread2::UpdateSyncLoadContext toward the end of the function, you’ll see we only handle some specific recursive case if we found all packages… why we don’t find anything for index 0 is not clear.

If you look in FAsyncLoadingThread2::CreateAsyncPackagesFromQueue, the only condition where we would not register the package mapping RequestId->Package in RequestIdToPackageMap would be when going through the QueueUnresolvedPackage code path. Which indicate the package you see marked as nullptr is either EPackageStoreEntryStatus::Missing or EPackageStoreEntryStatus::NotInstalled.

Since this seems to happen very early during boot at requestid ~120... you could try to run the LogStreaming logs in veryverbose mode until requestid 150 and turn it back to normal afterward? Probably requires some code change tho in AsyncLoading2.cpp.

Are the logs indicating anything about missing packages?

Unless you load these packages with LOAD_NoWarn or LOAD_Quiet, any call to QueueUnresolvedPackage should issue some warnings.

Let me know if it helps you dig further into the issue.

Thanks

Danny

Did you try to dump the state of all the threads? We’ve seen issues in the past where the IO dispatcher was starved on decompression tasks because all threads were busy with PSO decompression at startup, and the loader was stuck on waiting for IO because nothing was making progress.

Hi,

In that dump, is it possible to include the game thread and loader thread?

Could this be a simple memory stomp? Did you try to run ASAN on your server to see if you could find anything suspicious?

Thanks

Hi,

If you don’t have an async loading thread, then there should be no data corruption when dumping package for the stall since there is no other thread the dump state can race with. That corruption and inability to dump the state of the loader points to signs of memory corruption.

Thanks,

Danny

Hey Danny, thanks again.

It’s only 1 of our cores that has a nullptr RequestedPackage entry, the rest of the cores all have valid entries. And the low requestid at 120 is specific to this core - each core has had a unique set of RequestIDs/RequestedPackages/AsyncPackageLookup/etc.

Some context that is the same across all of the cores: all but 1 RequestedPackage[i]::AsyncPackageLoadingState is set DeferredDelete and exactly 1 DependenciesReady. This 1 DependenciesReady package has AllDependenciesSetupState::WaitingForPackage and that WaitingForPackage is WaitingForIo. All of the FRunnableThreadPThread are in FPThreadEvent::Wait (this=…, WaitTime=4294967295,…), including FFileIoStore and FIoDispatcherImpl seemingly waiting for work. Here is that context from one instance:

`PendingRequests: .size=1 { [0] = 1439 }
RequestIdToPackageMap: .size=1 { [1439] = 0x7fbebf75a390 }

SyncLoadContext->RequestedPackages .size=15
SyncLoadContext->RequestedPackages[0 .. 13] … State: DeferredDelete
SyncLoadContext->RequestedPackages[14] [Content removed] State: DependenciesReady
AllDependenciesSetupState [Content removed] State: WaitingForIo

AsyncPackageLookup .size=9
AsyncPackageLookup[0] [Content removed] State: DependenciesReady

AsyncPackageLookup[5] [Content removed] and SerializationState.IoRequest.Impl != nullptr but looks like maybe partial garbage?

(all other AsyncPackageLookup::SerializationState.IoRequest.Impl == nullptr)

`(lldb) p ((FAsyncPackage2*)0x7fbebf753c40)->Desc
(FAsyncPackageDesc2) {
RequestID = -1
Priority = 2147483647
PackageFlags = PKG_None

UPackageId = (Id = 16699006371994741646)
}

(lldb) p ((FAsyncPackage2*)0x7fbebf753c40)->SerializationState.IoRequest.Impl:
(FIoRequestImpl) {
UE::FInheritedContextBase = (InheritedMetadataId = 330767)
NextRequest = 0x7fbedb22f4a0
BackendData = 0x000000000000
ChunkId = (Id = uint8[12] @ 0x61b084d23938)
Options = (RequestedOffset = 0, RequestedSize = 18446744073709551615, TargetVa = 0x000000000000, Flags = None)
Priority = 2147483647
Allocator = 0x7fbf1c423120
Backend = 0x7fbf3f3fc388
Batch = nullptr
Buffer = {
Value = (Storage = uint8[8] [Content removed] bIsSet = true)
}

RefCount = 480981616
ErrorCode = UE::Core::Private::Atomic::TAtomicBaseType_T = (Element = PendingFork | PendingEncryptionKey | 0x7fa0)
bCancelled = true
bFailed = false
}`Not sure if we can take the bCancelled (or any other values - RequestedSize=18446744073709551615 ) serious here, but this _feels_ like async loading has gotten out of sync and there’s no way to progress the expected state.

Please let me know if I can add any more context,

-blake

We’ve only observed this on the Linux Shipping dedicated server, there shouldn’t be any PSO work expected (right)?

I’ve got a script that parses out name/aff/prio for FRunnableThreadPThread stacks, and I’ve done additional filtering to get the stacks to fit in a reply (eg the frame # skips are duplicate/inline calls).

(lldb) script dump.list_runnable_threads() Thread #5 (tid=8038): BackgroundThreadPool #0, Affinity=18446744073709551615, Priority=TPri_Lowest frame #1: 0x00007fa0c7ca75d8 libc.so.6pthread_cond_wait + 488
frame #2: 0x0000000004f8e3da Server-Linux-ShippingFPThreadEvent::Wait(this=..., WaitTime=4294967295, bIgnoreThreadIdleStats=...) at GenericPlatformProcess.cpp:476:14 frame #4: 0x0000000004fdeec1 Server-Linux-ShippingFQueuedThread::Run(this=…) at ThreadingBase.cpp:1435:17

Thread #2 (tid=8039): Foreground Worker #0, Affinity=18446744073709551615, Priority=TPri_SlightlyBelowNormal
frame #1: 0x00007fa0c7ca75d8 libc.so.6pthread_cond_wait + 488 frame #2: 0x0000000004f8e3da Server-Linux-ShippingFPThreadEvent::Wait(this=…, WaitTime=4294967295, bIgnoreThreadIdleStats=…) at GenericPlatformProcess.cpp:476:14
frame #3: 0x0000000004f23cf7 Server-Linux-ShippingLowLevelTasks::Private::FWaitingQueue::Park(LowLevelTasks::Private::FWaitEvent*, LowLevelTasks::Private::FOutOfWork&, int, int) [inlined] FEvent::Wait(this=...) at Event.h:76:10 frame #7: 0x0000000004f2374f Server-Linux-ShippingLowLevelTasks::FScheduler::WorkerLoop(this=…, WorkerEvent=…, WorkerLocalQueue=…, WaitCycles=719, bPermitBackgroundWork=…) at Scheduler.cpp:539:50
Thread #3 (tid=8040): Foreground Worker #1, Affinity=18446744073709551615, Priority=TPri_SlightlyBelowNormal
frame #1: 0x00007fa0c7ca75d8 libc.so.6pthread_cond_wait + 488 frame #2: 0x0000000004f8e3da Server-Linux-ShippingFPThreadEvent::Wait(this=…, WaitTime=4294967295, bIgnoreThreadIdleStats=…) at GenericPlatformProcess.cpp:476:14
frame #3: 0x0000000004f23cf7 Server-Linux-ShippingLowLevelTasks::Private::FWaitingQueue::Park(LowLevelTasks::Private::FWaitEvent*, LowLevelTasks::Private::FOutOfWork&, int, int) [inlined] FEvent::Wait(this=...) at Event.h:76:10 frame #7: 0x0000000004f2374f Server-Linux-ShippingLowLevelTasks::FScheduler::WorkerLoop(this=…, WorkerEvent=…, WorkerLocalQueue=…, WaitCycles=991, bPermitBackgroundWork=…) at Scheduler.cpp:539:50
Thread #6 (tid=8041): Background Worker #0, Affinity=18446744073709551615, Priority=TPri_SlightlyBelowNormal
frame #1: 0x00007fa0c7ca75d8 libc.so.6pthread_cond_wait + 488 frame #2: 0x0000000004f8e3da Server-Linux-ShippingFPThreadEvent::Wait(this=…, WaitTime=4294967295, bIgnoreThreadIdleStats=…) at GenericPlatformProcess.cpp:476:14
frame #3: 0x0000000004f23cf7 Server-Linux-ShippingLowLevelTasks::Private::FWaitingQueue::Park(LowLevelTasks::Private::FWaitEvent*, LowLevelTasks::Private::FOutOfWork&, int, int) [inlined] FEvent::Wait(this=...) at Event.h:76:10 frame #7: 0x0000000004f2374f Server-Linux-ShippingLowLevelTasks::FScheduler::WorkerLoop(this=…, WorkerEvent=…, WorkerLocalQueue=…, WaitCycles=1361, bPermitBackgroundWork=…) at Scheduler.cpp:539:50
Thread #9 (tid=8042): Background Worker #1, Affinity=18446744073709551615, Priority=TPri_SlightlyBelowNormal
frame #1: 0x00007fa0c7ca75d8 libc.so.6pthread_cond_wait + 488 frame #2: 0x0000000004f8e3da Server-Linux-ShippingFPThreadEvent::Wait(this=…, WaitTime=4294967295, bIgnoreThreadIdleStats=…) at GenericPlatformProcess.cpp:476:14
frame #3: 0x0000000004f23cf7 Server-Linux-ShippingLowLevelTasks::Private::FWaitingQueue::Park(LowLevelTasks::Private::FWaitEvent*, LowLevelTasks::Private::FOutOfWork&, int, int) [inlined] FEvent::Wait(this=...) at Event.h:76:10 frame #7: 0x0000000004f2374f Server-Linux-ShippingLowLevelTasks::FScheduler::WorkerLoop(this=…, WorkerEvent=…, WorkerLocalQueue=…, WaitCycles=1237, bPermitBackgroundWork=…) at Scheduler.cpp:539:50
Thread #7 (tid=8043): Foreground Worker (Standby #0), Affinity=18446744073709551615, Priority=TPri_SlightlyBelowNormal
frame #1: 0x00007fa0c7ca75d8 libc.so.6pthread_cond_wait + 488 frame #2: 0x0000000004f8e3da Server-Linux-ShippingFPThreadEvent::Wait(this=…, WaitTime=4294967295, bIgnoreThreadIdleStats=…) at GenericPlatformProcess.cpp:476:14
frame #3: 0x0000000004f22ce1 Server-Linux-ShippingLowLevelTasks::Private::FWaitingQueue::CommitStandby(LowLevelTasks::Private::FWaitEvent*, LowLevelTasks::Private::FOutOfWork&) [inlined] FEvent::Wait(this=...) at Event.h:76:10 frame #6: 0x0000000004f22b92 Server-Linux-ShippingLowLevelTasks::FScheduler::StandbyLoop(this=…, WorkerEvent=…, WorkerLocalQueue=…, WaitCycles=…, bPermitBackgroundWork=…) at Scheduler.cpp:497:50

Thread #18 (tid=8045): FAsyncWriter_GameServer_GUID_Log, Affinity=18446744073709551615, Priority=TPri_BelowNormal
frame #2: 0x00007fa0c7d1e205 libc.so.6usleep + 69 frame #3: 0x0000000005115e56 Server-Linux-ShippingFAsyncWriter::Run(this=…) at OutputDeviceFile.cpp:297:4
Thread #13 (tid=8047): HttpManagerThread, Affinity=18446744073709551615, Priority=TPri_Normal
frame #0: 0x00007fa0c7d1d95c libc.so.6__select + 332 frame #1: 0x000000000e76a169 Server-Linux-ShippingCurl_poll [inlined] our_select(maxfd=…, fds_read=0x00007fa0a51387d0, fds_write=0x00007fa0a51388d0, fds_err=0x00007fa0a5138850, timeout_ms=…) at select.c:163:10
frame #5: 0x0000000006b69fb7 Server-Linux-ShippingFCurlMultiPollIOManager::Poll(this=..., WaitTime=(Ticks = 1000000)) at CurlMultiPollEventLoopHttpThread.cpp:57:20 Thread #16 (tid=8048): OnlineAsyncTaskThreadNull DefaultInstance(1), Affinity=18446744073709551615, Priority=TPri_Normal frame #1: 0x00007fa0c7ca78bc libc.so.6pthread_cond_timedwait + 540
frame #2: 0x0000000004f8e2c0 Server-Linux-ShippingFPThreadEvent::Wait(this=..., WaitTime=20, bIgnoreThreadIdleStats=...) at GenericPlatformProcess.cpp:486:14 frame #3: 0x0000000009beb55f Server-Linux-ShippingFOnlineAsyncTaskManager::Run(this=…) at OnlineAsyncTaskManager.cpp:70:14

Thread #8 (tid=8049): IOThreadPool #0, Affinity=18446744073709551615, Priority=TPri_AboveNormal
frame #1: 0x00007fa0c7ca75d8 libc.so.6pthread_cond_wait + 488 frame #2: 0x0000000004f8e3da Server-Linux-ShippingFPThreadEvent::Wait(this=…, WaitTime=4294967295, bIgnoreThreadIdleStats=…) at GenericPlatformProcess.cpp:476:14
frame #3: 0x0000000004fdeece Server-Linux-ShippingFQueuedThread::Run() [inlined] FEvent::Wait(this=...) at Event.h:76:10 Thread #10 (tid=8050): IOThreadPool #1, Affinity=18446744073709551615, Priority=TPri_AboveNormal frame #1: 0x00007fa0c7ca75d8 libc.so.6pthread_cond_wait + 488
frame #2: 0x0000000004f8e3da Server-Linux-ShippingFPThreadEvent::Wait(this=..., WaitTime=4294967295, bIgnoreThreadIdleStats=...) at GenericPlatformProcess.cpp:476:14 frame #3: 0x0000000004fdeece Server-Linux-ShippingFQueuedThread::Run() [inlined] FEvent::Wait(this=…) at Event.h:76:10
Thread #11 (tid=8051): IoService, Affinity=18446744073709551615, Priority=TPri_AboveNormal
frame #1: 0x00007fa0c7ca75d8 libc.so.6pthread_cond_wait + 488 frame #2: 0x0000000004f8e3da Server-Linux-ShippingFPThreadEvent::Wait(this=…, WaitTime=4294967295, bIgnoreThreadIdleStats=…) at GenericPlatformProcess.cpp:476:14
frame #3: 0x0000000006f779dc Server-Linux-ShippingFFileIoStore::Run(this=...) at IoDispatcherFileBackend.cpp:2218:18 Thread #12 (tid=8052): IoDispatcher, Affinity=18446744073709551615, Priority=TPri_AboveNormal frame #1: 0x00007fa0c7ca75d8 libc.so.6pthread_cond_wait + 488
frame #2: 0x0000000004f8e3da Server-Linux-ShippingFPThreadEvent::Wait(this=..., WaitTime=4294967295, bIgnoreThreadIdleStats=...) at GenericPlatformProcess.cpp:476:14 frame #3: 0x000000000504c754 Server-Linux-ShippingFIoDispatcherImpl::Run() [inlined] FEvent::Wait(this=…) at Event.h:76:10
frame #4: 0x000000000504c747 Server-Linux-ShippingFIoDispatcherImpl::Run(this=...) at IoDispatcher.cpp:0

It could totally be a memstomp, though ASAN has not surfaced anything suspicious yet.

Each server logs this on startup: LogStreaming: Display: AsyncLoading2 - Created: Event Driven Loader: false, Async Loading Thread: false, Async Post Load: false, and another later: LogStreaming: Display: AsyncLoading2 - Thread Started: false, IsInitialLoad: false. I’ve not seen any FRunnableThreads named FAsyncLoadingThread in cores or when inspecting a running server with lldb, I assume this means no ALT and we’re timeslicing async loading on the GameThread?

Most of the core GameThread stacks are from WorldPartition kicking a flush:

* frame #0: 0x0000000004f8cfc0 Server-Linux-ShippingFGenericPlatformMisc::RaiseException(ExceptionCode=1) at GenericPlatformMisc.cpp:738:16
frame #1: 0x0000000005115301 Server-Linux-ShippingFOutputDevice::LogfImpl(this=..., Fmt=u"%s") at OutputDevice.cpp:81:2 frame #2: 0x0000000005063016 Server-Linux-ShippingUE::Logging::Private::BasicFatalLog(Category=…, Log=…) at StructuredLog.cpp:1104:2
frame #3: 0x00000000052e55d5 Server-Linux-ShippingFAsyncLoadingThread2::FlushLoading(this=..., RequestIDs=TConstArrayView<int32> @ 0x00005cb8f19f7190) at AsyncLoading2.cpp:9991:7 frame #4: 0x00000000052ff400 Server-Linux-ShippingFlushAsyncLoading(RequestIds=TConstArrayView @ 0x00005cb8e4b40e10) at AsyncPackageLoader.cpp:327:19
frame #5: 0x000000000903b959 Server-Linux-ShippingUWorld::FlushAsyncLevelRequests(this=...) at World.cpp:4375:3 frame #6: 0x00000000090356a2 Server-Linux-ShippingUWorld::FlushLevelStreaming(EFlushLevelStreamingType) [inlined] UWorld::FlushLevelStreaming(EFlushLevelStreamingType)::$_0::operator()(this=…) const at World.cpp:4686:4
frame #7: 0x0000000009035691 Server-Linux-ShippingUWorld::FlushLevelStreaming(this=..., FlushType=Full) at World.cpp:4693:2 frame #8: 0x000000000903b07d Server-Linux-ShippingUWorld::BlockTillLevelStreamingCompleted(this=…) at World.cpp:4250:3
frame #9: 0x00000000090a91d6 Server-Linux-ShippingTBaseUObjectMethodDelegateInstance<false, UWorldPartition, void (), FDefaultDelegateUserPolicy>::ExecuteIfSafe() const [inlined] decltype(UE::Core::Private::DereferenceIfNecessary<UWorldPartition>(Forward<UWorldPartition*&>(fp0), &fp0).*fp()) Invoke<void (UWorldPartition::*)(), UWorldPartition*&, UWorldPartition>(PtrMemFun=..., Target=...) at Invoke.h:66:9 frame #10: 0x00000000090a91c5 Server-Linux-ShippingTBaseUObjectMethodDelegateInstance<false, UWorldPartition, void (), FDefaultDelegateUserPolicy>::ExecuteIfSafe() const [inlined] decltype(auto) UE::Core::Private::Tuple::TTupleBase<TIntegerSequence>::ApplyAfter<void (UWorldPartition::* const&)(), UWorldPartition*&>(this=…, Func=…, Args=…) const & at Tuple.h:317:143
frame #11: 0x00000000090a91bd Server-Linux-ShippingTBaseUObjectMethodDelegateInstance<false, UWorldPartition, void (), FDefaultDelegateUserPolicy>::ExecuteIfSafe(this=...) const at DelegateInstancesImpl.h:667:24 frame #12: 0x00000000090d39f9 Server-Linux-ShippingAWorldSettings::NotifyBeginPlay() [inlined] void TMulticastDelegateBase::Broadcast<IBaseDelegateInstance<void (), FDefaultDelegateUserPolicy>>(this=…) const at MulticastDelegateBase.h:257:128
frame #13: 0x00000000090d39b2 Server-Linux-ShippingAWorldSettings::NotifyBeginPlay() [inlined] TMulticastDelegate<void (), FDefaultDelegateUserPolicy>::Broadcast(this=...) const at DelegateSignatureImpl.inl:1079:26 frame #14: 0x00000000090d39b2 Server-Linux-ShippingAWorldSettings::NotifyBeginPlay(this=…) at WorldSettings.cpp:331:30
frame #15: 0x00000000087b515c Server-Linux-ShippingAGameStateBase::HandleBeginPlay(this=...) at GameStateBase.cpp:227:22 frame #16: 0x000000000903e213 Server-Linux-ShippingUWorld::BeginPlay(this=…) at World.cpp:5439:13
frame #17: 0x0000000008f8c2ca Server-Linux-ShippingUEngine::LoadMap(this=..., WorldContext=..., URL=..., Pending=..., Error=...) at UnrealEngine.cpp:16011:24 frame #18: 0x0000000008f89335 Server-Linux-ShippingUEngine::Browse(this=…, WorldContext=…, URL=FURL [Content removed] Error=…) at UnrealEngine.cpp:15154:10
frame #19: 0x0000000008f8a463 Server-Linux-ShippingUEngine::TickWorldTravel(this=..., Context=..., DeltaSeconds=...) at UnrealEngine.cpp:15317:33 frame #20: 0x0000000008755ded Server-Linux-ShippingUGameEngine::Tick(this=…, DeltaSeconds=…, bIdleMode=false) at GameEngine.cpp:1773:4
frame #21: 0x0000000009439169 Server-Linux-ShippingFEngineLoop::Tick(this=...) at LaunchEngineLoop.cpp:5863:12 frame #22: 0x000000000943b5ca Server-Linux-ShippingGuardedMain(char16_t const*) [inlined] EngineTick() at Launch.cpp:69:14`If full stacks from all threads in the core would be useful please let me know where I can upload/post files - they are too large to paste here.

Thanks,

-blake