Description

When undoing a Replace Selected Actors operation, the resulting actor is corrupt and triggers an ensure where the root component is in the process of being destroyed. This is a regression that popped up in 4.24, and does not reproduce in 4.23 or earlier. Initial investigation shows quite a few changes to how the SCS editor builds component hierarchies in this time frame, but it's unclear why the root component is ensuring on !IsPendingKill when we verify that the owning actor is not being destroyed just prior. Callstack of the ensure in 4.26 is posted below.

Steps to Reproduce
  1. Create two blueprints which both contain a default scene root and a static mesh component
  2. Place one actor in the viewport, select the other in the content browser, then right click the first and replace it with the second
  3. Hit Ctrl+Z to undo, and note the ensure that fires, as well as the corrupt actor now in the scene
Callstack

> [Inline Frame] UE4Editor-Kismet.dll!SSCSEditor::AddTreeNodeFromComponent::__l2::<lambda_31218ffe9a13801c19e37d518527922c>::operator()() Line 6568 C++
UE4Editor-Kismet.dll!SSCSEditor::AddTreeNodeFromComponent(UActorComponent * InActorComponent, TSharedPtr<FSCSEditorTreeNode,0> InParentTreeNode) Line 6568 C++
UE4Editor-Kismet.dll!SSCSEditor::BuildSubTreeForActorNode(TSharedPtr<FSCSEditorTreeNodeActorBase,0> InActorNode) Line 5034 C++
UE4Editor-Kismet.dll!SSCSEditor::UpdateTree(bool bRegenerateTreeNodes) Line 5089 C++
UE4Editor-LevelEditor.dll!SActorDetails::SetObjects(const TArray<UObject *,TSizedDefaultAllocator<32>> & InObjects, bool bForceRefresh) Line 277 C++
UE4Editor-LevelEditor.dll!SLevelEditor::OnActorSelectionChanged(const TArray<UObject *,TSizedDefaultAllocator<32>> & NewSelection, bool bForceRefresh) Line 1682 C++
[Inline Frame] UE4Editor-LevelEditor.dll!TMemberFunctionCaller<SLevelEditor,void (__cdecl SLevelEditor::*)(TArray<UObject *,TSizedDefaultAllocator<32>> const &,bool)>::operator()(const TArray<UObject *,TSizedDefaultAllocator<32>> &) Line 156 C++
[Inline Frame] UE4Editor-LevelEditor.dll!UE4Tuple_Private::TTupleImpl<TIntegerSequence<unsigned int>>::ApplyAfter(TMemberFunctionCaller<SLevelEditor,void (__cdecl SLevelEditor::*)(TArray<UObject *,TSizedDefaultAllocator<32>> const &,bool)> &&) Line 272 C++
[Inline Frame] UE4Editor-LevelEditor.dll!TBaseSPMethodDelegateInstance<0,SLevelEditor,0,TTypeWrapper<void> __cdecl(TArray<UObject *,TSizedDefaultAllocator<32>> const &,bool)>::Execute(const TArray<UObject *,TSizedDefaultAllocator<32>> &) Line 298 C++
UE4Editor-LevelEditor.dll!TBaseSPMethodDelegateInstance<0,SLevelEditor,0,void __cdecl(TArray<UObject *,TSizedDefaultAllocator<32>> const &,bool)>::ExecuteIfSafe(const TArray<UObject *,TSizedDefaultAllocator<32>> & <Params_0>, bool <Params_1>) Line 374 C++
[Inline Frame] UE4Editor-LevelEditor.dll!TBaseMulticastDelegate<void,TArray<UObject *,TSizedDefaultAllocator<32>> const &,bool>::Broadcast(const TArray<UObject *,TSizedDefaultAllocator<32>> &) Line 981 C++
UE4Editor-LevelEditor.dll!FLevelEditorModule::BroadcastActorSelectionChanged(const TArray<UObject *,TSizedDefaultAllocator<32>> & NewSelection, bool bForceRefresh) Line 445 C++
UE4Editor-UnrealEd.dll!UUnrealEdEngine::UpdateFloatingPropertyWindowsFromActorList(const TArray<UObject *,TSizedDefaultAllocator<32>> & ActorList, bool bForceRefresh) Line 64 C++
UE4Editor-UnrealEd.dll!UUnrealEdEngine::UpdateFloatingPropertyWindows(bool bForceRefresh) Line 55 C++
UE4Editor-UnrealEd.dll!UUnrealEdEngine::NoteSelectionChange(bool bNotify) Line 417 C++
UE4Editor-UnrealEd.dll!UEditorEngine::HandleTransactorRedoUndo(const FTransactionContext & TransactionContext, bool Succeeded, bool WasUndo) Line 1192 C++
[Inline Frame] UE4Editor-UnrealEd.dll!TMemberFunctionCaller<UEditorEngine,void (__cdecl UEditorEngine::*)(FTransactionContext const &,bool)>::operator()(const FTransactionContext &) Line 156 C++
[Inline Frame] UE4Editor-UnrealEd.dll!UE4Tuple_Private::TTupleImpl<TIntegerSequence<unsigned int>>::ApplyAfter(TMemberFunctionCaller<UEditorEngine,void (__cdecl UEditorEngine::*)(FTransactionContext const &,bool)> &&) Line 272 C++
[Inline Frame] UE4Editor-UnrealEd.dll!TBaseUObjectMethodDelegateInstance<0,UEditorEngine,TTypeWrapper<void> __cdecl(FTransactionContext const &,bool)>::Execute(const FTransactionContext &) Line 654 C++
UE4Editor-UnrealEd.dll!TBaseUObjectMethodDelegateInstance<0,UEditorEngine,void __cdecl(FTransactionContext const &,bool)>::ExecuteIfSafe(const FTransactionContext & <Params_0>, bool <Params_1>) Line 716 C++
[Inline Frame] UE4Editor-UnrealEd.dll!TBaseMulticastDelegate<void,FTransactionContext const &,bool>::Broadcast(const FTransactionContext &) Line 981 C++
UE4Editor-UnrealEd.dll!UTransBuffer::Undo(bool bCanRedo) Line 1498 C++
[Inline Frame] UE4Editor-UnrealEd.dll!UEditorEngine::UndoTransaction(bool) Line 1417 C++
UE4Editor-UnrealEd.dll!UEditorEngine::Exec_Transaction(const wchar_t * Str, FOutputDevice & Ar) Line 5300 C++
UE4Editor-UnrealEd.dll!UEditorEngine::Exec(UWorld * InWorld, const wchar_t * Stream, FOutputDevice & Ar) Line 5752 C++
UE4Editor-UnrealEd.dll!UUnrealEdEngine::Exec(UWorld * InWorld, const wchar_t * Stream, FOutputDevice & Ar) Line 697 C++
UE4Editor-MainFrame.dll!FMainFrameActionCallbacks::ExecuteExecCommand(FString Command) Line 1049 C++
[Inline Frame] UE4Editor-MainFrame.dll!UE4Tuple_Private::TTupleImpl<TIntegerSequence<unsigned int,0>,FString>::ApplyAfter(void[Image Removed](FString) &) Line 272 C++
[Inline Frame] UE4Editor-MainFrame.dll!TBaseStaticDelegateInstance<TTypeWrapper<void> __cdecl(void),FString>::Execute() Line 806 C++
UE4Editor-MainFrame.dll!TBaseStaticDelegateInstance<void __cdecl(void),FString>::ExecuteIfSafe() Line 859 C++
UE4Editor-Slate.dll!FUICommandList::ConditionalProcessCommandBindings(const FKey Key, bool bCtrl, bool bAlt, bool bShift, bool bCmd, bool bRepeat) Line 220 C++
UE4Editor-Slate.dll!FUICommandList::ProcessCommandBindings(const FKeyEvent & InKeyEvent) Line 164 C++
UE4Editor-MainFrame.dll!FMainFrameActionCallbacks::OnUnhandledKeyDownEvent(const FKeyEvent & InKeyEvent) Line 243 C++
[Inline Frame] UE4Editor-MainFrame.dll!UE4Tuple_Private::TTupleImpl<TIntegerSequence<unsigned int>>::ApplyAfter(FReply[Image Removed](const FKeyEvent &) &) Line 272 C++
UE4Editor-MainFrame.dll!TBaseStaticDelegateInstance<FReply __cdecl(FKeyEvent const &)>::Execute(const FKeyEvent & <Params_0>) Line 806 C++
[Inline Frame] UE4Editor-Slate.dll!TBaseDelegate<FReply,FKeyEvent const &>::Execute(const FKeyEvent &) Line 554 C++
UE4Editor-Slate.dll!FSlateApplication::ProcessKeyDownEvent(const FKeyEvent & InKeyEvent) Line 4328 C++
UE4Editor-Slate.dll!FSlateApplication::OnKeyDown(const int KeyCode, const unsigned int CharacterCode, const bool IsRepeat) Line 4201 C++
UE4Editor-ApplicationCore.dll!FWindowsApplication::ProcessDeferredMessage(const FDeferredWindowsMessage & DeferredMessage) Line 1971 C++
UE4Editor-ApplicationCore.dll!FWindowsApplication::DeferMessage(TSharedPtr<FWindowsWindow,0> & NativeWindow, HWND__ * InHWnd, unsigned int InMessage, unsigned __int64 InWParam, __int64 InLParam, int MouseX, int MouseY, unsigned int RawInputFlags) Line 2588 C++
UE4Editor-ApplicationCore.dll!FWindowsApplication::ProcessMessage(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 1812 C++
UE4Editor-ApplicationCore.dll!FWindowsApplication::AppWndProc(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 855 C++
[External Code]
[Inline Frame] UE4Editor-ApplicationCore.dll!WinPumpMessages() Line 108 C++
UE4Editor-ApplicationCore.dll!FWindowsPlatformApplicationMisc::PumpMessages(bool bFromMainLoop) Line 130 C++
UE4Editor.exe!FEngineLoop::Tick() Line 4718 C++
[Inline Frame] UE4Editor.exe!EngineTick() Line 62 C++
UE4Editor.exe!GuardedMain(const wchar_t * CmdLine) Line 169 C++
UE4Editor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 257 C++
[External Code]

Have Comments or More Details?

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

4
Login to Vote

Fixed
ComponentUE - Gameplay - Components
Affects Versions4.244.254.265.0
Target Fix5.4
Fix Commit31948222
Release Commit32496331
CreatedJul 22, 2020
ResolvedMar 5, 2024
UpdatedMar 26, 2024