Description

As you can see from the above callstack it appears that calling RestoreArea can call FindPotentiallyClosedTab again higher in the stack, which can Remove() an entry from CollapsedDockAreas- this causes the FindPotentiallyClosedTab lower in the stack to then be stuck with an incorrect/potentially out of bounds CollapsedAreaWithMatchingTab index which it then tries to remove when we return to that function lower in the stack.

It seems what is happening in this callstack is code is trying to open the message log, the act of opening the message log is causing a message to print that again tries to open the message log (FMessageLogModule::OpenMessageLog reenters)- the top open succeeds and removes the Message Log tab and then the tab no longer even exists in CollapsedDockAreas when we return to the call to FindTabInCollapsedArea lower in the stack.

Steps to Reproduce
  • Open a WP map (a quite large one)
  • Close the message log and WP editor windows
  • Start PIE in the level

Repro is a bit inconsistent, and depends on details from the description below

Callstack

UnrealEditor-Slate.dll!FTabManager::FindPotentiallyClosedTab(const FTabId & ClosedTabId) Line 1440    C++
UnrealEditor-Slate.dll!FTabManager::InvokeTab_Internal(const FTabId & TabId, bool bInvokeAsInactive) Line 1389    C++
UnrealEditor-Slate.dll!FTabManager::TryInvokeTab(const FTabId & TabId, bool bInvokeAsInactive) Line 1312    C++
UnrealEditor-MessageLog.dll!FMessageLogModule::OpenMessageLog(const FName & LogName) Line 121    C++
UnrealEditor-MessageLog.dll!FMessageLogListingViewModel::OpenMessageLog() Line 118    C++
UnrealEditor-Core.dll!FMessageLog::Open(EMessageSeverity::Type InSeverityFilter, bool bOpenEvenIfEmpty) Line 193    C++
[Inline Frame] UnrealEditor-Engine.dll!UStaticMesh::ExecutePostLoadInternal::__l119::<lambda_12b633bf3801ba120802b11a5b679ab8>::operator()() Line 6413    C++
[Inline Frame] UnrealEditor-Engine.dll!Invoke(UStaticMesh::ExecutePostLoadInternal::__l119::<lambda_12b633bf3801ba120802b11a5b679ab8> &) Line 47    C++
UnrealEditor-Engine.dll!UE::Core::Private::Function::TFunctionRefCaller<<lambda_12b633bf3801ba120802b11a5b679ab8>,void __cdecl(void)>::Call(void * Obj) Line 474    C++
[Inline Frame] UnrealEditor-Engine.dll!SetPromise(TPromise<void> &) Line 63    C++
[Inline Frame] UnrealEditor-Engine.dll!TAsyncGraphTask<void>::DoTask(ENamedThreads::Type) Line 127    C++
UnrealEditor-Engine.dll!TGraphTask<TAsyncGraphTask<void>>::ExecuteTask(TArray<FBaseGraphTask *,TSizedDefaultAllocator<32>> & NewTasks, ENamedThreads::Type CurrentThread, bool bDeleteOnCompletion) Line 1348    C++
[Inline Frame] UnrealEditor-Core.dll!FBaseGraphTask::Execute(TArray<FBaseGraphTask *,TSizedDefaultAllocator<32>> & CurrentThread, ENamedThreads::Type) Line 950    C++
UnrealEditor-Core.dll!FNamedTaskThread::ProcessTasksNamedThread(int QueueIndex, bool bAllowStall) Line 760    C++
UnrealEditor-Core.dll!FNamedTaskThread::ProcessTasksUntilQuit(int QueueIndex) Line 649    C++
[Inline Frame] UnrealEditor-Core.dll!FTaskGraphCompatibilityImplementation::ProcessThreadUntilRequestReturn(ENamedThreads::Type CurrentThread) Line 2149    C++
UnrealEditor-Core.dll!FTaskGraphCompatibilityImplementation::WaitUntilTasksComplete(const TArray<TRefCountPtr<FGraphEvent>,TSizedInlineAllocator<4,32,TSizedDefaultAllocator<32>>> & Tasks, ENamedThreads::Type CurrentThreadIfKnown) Line 2203    C++
[Inline Frame] UnrealEditor-D3D12RHI.dll!FTaskGraphInterface::WaitUntilTaskCompletes(TRefCountPtr<FGraphEvent> &&) Line 444    C++
[Inline Frame] UnrealEditor-D3D12RHI.dll!FGraphEvent::Wait(ENamedThreads::Type) Line 1090    C++
UnrealEditor-D3D12RHI.dll!FD3D12DynamicRHI::ProcessInterruptQueueUntil(FGraphEvent * GraphEvent) Line 857    C++
UnrealEditor-D3D12RHI.dll!FD3D12SyncPoint::Wait() Line 844    C++
UnrealEditor-D3D12RHI.dll!FD3D12Device::BlockUntilIdle() Line 521    C++
UnrealEditor-D3D12RHI.dll!FD3D12Adapter::BlockUntilIdle() Line 1607    C++
UnrealEditor-D3D12RHI.dll!FD3D12Viewport::Resize(unsigned int InSizeX, unsigned int InSizeY, bool bInIsFullscreen, EPixelFormat PreferredPixelFormat) Line 406    C++
UnrealEditor-D3D12RHI.dll!FD3D12Viewport::Init() Line 223    C++
UnrealEditor-D3D12RHI.dll!FD3D12DynamicRHI::RHICreateViewport(void * WindowHandle, unsigned int SizeX, unsigned int SizeY, bool bIsFullscreen, EPixelFormat PreferredPixelFormat) Line 831    C++
[Inline Frame] UnrealEditor-SlateRHIRenderer.dll!RHICreateViewport(void * WindowHandle, unsigned int PreferredPixelFormat, unsigned int) Line 1598    C++
UnrealEditor-SlateRHIRenderer.dll!FSlateRHIRenderer::CreateViewport(const TSharedRef<SWindow,1> Window) Line 412    C++
UnrealEditor-SlateCore.dll!SWindow::ShowWindow() Line 1410    C++
UnrealEditor-Slate.dll!FSlateApplication::AddWindowAsNativeChild(TSharedRef<SWindow,1> InSlateWindow, TSharedRef<SWindow,1> InParentWindow, const bool bShowImmediately) Line 2167    C++
UnrealEditor-Slate.dll!FTabManager::RestoreArea_Helper(const TSharedRef<FTabManager::FLayoutNode,1> & LayoutNode, const TSharedPtr<SWindow,1> & ParentWindow, const bool bEmbedTitleAreaContent, FSidebarTabLists & OutSidebarTabs, const EOutputCanBeNullptr OutputCanBeNullptr) Line 1732    C++
UnrealEditor-Slate.dll!FTabManager::RestoreArea(const TSharedRef<FTabManager::FArea,1> & AreaToRestore, const TSharedPtr<SWindow,1> & InParentWindow, const bool bEmbedTitleAreaContent, const EOutputCanBeNullptr OutputCanBeNullptr) Line 1565    C++
UnrealEditor-Slate.dll!FTabManager::FindPotentiallyClosedTab(const FTabId & ClosedTabId) Line 1443    C++
UnrealEditor-Slate.dll!FTabManager::InvokeTab_Internal(const FTabId & TabId, bool bInvokeAsInactive) Line 1389    C++
UnrealEditor-Slate.dll!FTabManager::TryInvokeTab(const FTabId & TabId, bool bInvokeAsInactive) Line 1312    C++
UnrealEditor-MessageLog.dll!FMessageLogModule::OpenMessageLog(const FName & LogName) Line 121    C++
UnrealEditor-MessageLog.dll!FMessageLogListingViewModel::OpenMessageLog() Line 118    C++
UnrealEditor-Core.dll!FMessageLog::Open(EMessageSeverity::Type InSeverityFilter, bool bOpenEvenIfEmpty) Line 193    C++
UnrealEditor-Engine.dll!UMaterial::SetMaterialUsage(bool & bNeedsRecompile, const EMaterialUsage Usage) Line 1794    C++
UnrealEditor-Engine.dll!UMaterial::CheckMaterialUsage(const EMaterialUsage Usage) Line 1666    C++
UnrealEditor-Engine.dll!UMaterial::CheckMaterialUsage_Concurrent(const EMaterialUsage Usage) Line 1676    C++
UnrealEditor-Engine.dll!Nanite::FSceneProxy::FSceneProxy(UStaticMeshComponent * Component) Line 677    C++
UnrealEditor-Engine.dll!Nanite::FSceneProxy::FSceneProxy(UInstancedStaticMeshComponent * Component) Line 774    C++
UnrealEditor-Engine.dll!UInstancedStaticMeshComponent::CreateSceneProxy() Line 2372    C++
UnrealEditor-Renderer.dll!FScene::AddPrimitive(UPrimitiveComponent * Primitive, const UE::Math::TVector<double> & CameraPosition) Line 2324    C++
UnrealEditor-Engine.dll!UPrimitiveComponent::CreateRenderState_Concurrent(FRegisterComponentContext * Context) Line 657    C++
UnrealEditor-Engine.dll!UStaticMeshComponent::CreateRenderState_Concurrent(FRegisterComponentContext * Context) Line 837    C++
UnrealEditor-Engine.dll!UActorComponent::ExecuteRegisterEvents(FRegisterComponentContext * Context) Line 1787    C++
UnrealEditor-Engine.dll!UActorComponent::RegisterComponentWithWorld(UWorld * InWorld, FRegisterComponentContext * Context) Line 1442    C++
UnrealEditor-Engine.dll!AActor::IncrementalRegisterComponents(int NumComponentsToRegister, FRegisterComponentContext * Context) Line 5639    C++
UnrealEditor-Engine.dll!AActor::RegisterAllComponents() Line 5538    C++
UnrealEditor-Engine.dll!ULevel::AddLoadedActors(const TArray<AActor *,TSizedDefaultAllocator<32>> & ActorList, const UE::Math::TTransform<double> * TransformToApply) Line 970    C++
UnrealEditor-Engine.dll!ULevel::AddLoadedActor(AActor * Actor, const UE::Math::TTransform<double> * TransformToApply) Line 914    C++
UnrealEditor-Engine.dll!FWorldPartitionLoadingContext::FImmediate::RegisterActor(FWorldPartitionActorDesc * ActorDesc) Line 84    C++
[Inline Frame] UnrealEditor-Engine.dll!FWorldPartitionLoadingContext::LoadAndRegisterActor(FWorldPartitionActorDesc *) Line 46    C++
[Inline Frame] UnrealEditor-Engine.dll!FWorldPartitionReferenceImpl::IncRefCount(FWorldPartitionActorDesc * ActorDesc) Line 244    C++
[Inline Frame] UnrealEditor-Engine.dll!TWorldPartitionHandle<FWorldPartitionReferenceImpl>::IncRefCount() Line 309    C++
[Inline Frame] UnrealEditor-Engine.dll!TWorldPartitionHandle<FWorldPartitionReferenceImpl>::{ctor}(FActorDescContainerCollection *) Line 121    C++
UnrealEditor-Engine.dll!UWorldPartitionRuntimeHash::ConditionalRegisterAlwaysLoadedActorsForPIE(const FWorldPartitionActorDescView & ActorDescView, bool bIsMainWorldPartition, bool bIsMainContainer, bool bIsCellAlwaysLoaded) Line 53    C++
UnrealEditor-Engine.dll!UWorldPartitionRuntimeSpatialHash::CreateStreamingGrid(const FSpatialHashRuntimeGrid & RuntimeGrid, const FSquare2DGridHelper & PartionedActors, UWorldPartitionStreamingPolicy * StreamingPolicy, TArray<FString,TSizedDefaultAllocator<32>> * OutPackagesToGenerate) Line 1149    C++
UnrealEditor-Engine.dll!UWorldPartitionRuntimeSpatialHash::GenerateStreaming(UWorldPartitionStreamingPolicy * StreamingPolicy, const IStreamingGenerationContext * StreamingGenerationContext, TArray<FString,TSizedDefaultAllocator<32>> * OutPackagesToGenerate) Line 974    C++
UnrealEditor-Engine.dll!UWorldPartition::GenerateContainerStreaming(const UActorDescContainer * InActorDescContainer, TArray<FString,TSizedDefaultAllocator<32>> * OutPackagesToGenerate) Line 937    C++
UnrealEditor-Engine.dll!UWorldPartition::OnBeginPlay() Line 399    C++
[Inline Frame] UnrealEditor-Engine.dll!Invoke(void(UWorldPartition::*)(bool)) Line 66    C++
[Inline Frame] UnrealEditor-Engine.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(void(UWorldPartition::*)(bool) &) Line 327    C++
UnrealEditor-Engine.dll!TBaseUObjectMethodDelegateInstance<0,UWorldPartition,void __cdecl(bool),FDefaultDelegateUserPolicy>::ExecuteIfSafe(bool <Params_0>) Line 618    C++
[Inline Frame] UnrealEditor-UnrealEd.dll!TMulticastDelegateBase<FDefaultDelegateUserPolicy>::Broadcast(bool) Line 178    C++
UnrealEditor-UnrealEd.dll!TMulticastDelegate<void __cdecl(bool),FDefaultDelegateUserPolicy>::Broadcast(bool <Params_0>) Line 975    C++
UnrealEditor-UnrealEd.dll!UEditorEngine::StartPlayInEditorSession(FRequestPlaySessionParams & InRequestParams) Line 2623    C++
UnrealEditor-UnrealEd.dll!UEditorEngine::StartQueuedPlaySessionRequestImpl() Line 1250    C++
UnrealEditor-UnrealEd.dll!UEditorEngine::StartQueuedPlaySessionRequest() Line 1153    C++
UnrealEditor-UnrealEd.dll!UEditorEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 1839    C++
UnrealEditor-UnrealEd.dll!UUnrealEdEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 517    C++
UnrealEditor.exe!FEngineLoop::Tick() Line 5427    C++
[Inline Frame] UnrealEditor.exe!EngineTick() Line 66    C++
UnrealEditor.exe!GuardedMain(const wchar_t * CmdLine) Line 202    C++
UnrealEditor.exe!GuardedMainWrapper(const wchar_t * CmdLine) Line 123    C++
UnrealEditor.exe!LaunchWindowsStartup(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow, const wchar_t * CmdLine) Line 260    C++
UnrealEditor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * pCmdLine, int nCmdShow) Line 298    C++

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-187041 in the post.

0
Login to Vote

Fixed
ComponentUE - Editor - Workflow Systems
Affects Versions5.1
Target Fix5.3
Fix Commit25664737
Main Commit25664737
CreatedMay 25, 2023
ResolvedMay 29, 2023
UpdatedJan 19, 2024