Fixes since 4.27 for crashes due to garbage collection invalidating actors pointed to by soft-object references in Details panel UI?

Hello Jayden, sorry for the long delay. We are still getting the crash - I’m attaching a callstack. Please let me know if you have any other suggestions? For now I have implemented a thing to automatically deselect everything when starting PIE, but it’s not ideal…

[Inlined] FindObject(UObject *, const wchar_t *, bool) UObjectGlobals.h:1301

FSoftObjectPath::ResolveObjectInternal(const wchar_t *) SoftObjectPath.cpp:506

FSoftObjectPath::ResolveObjectInternal() SoftObjectPath.cpp:500

FSoftObjectPath::ResolveObject() SoftObjectPath.cpp:482

[Inlined] FSoftObjectPtr::Get() SoftObjectPtr.h:99

FSoftObjectProperty::GetObjectPropertyValue(const void *) PropertySoftObjectPtr.cpp:202

FObjectPropertyNode::GetReadAddressUncached(const FPropertyNode &, bool, FReadAddressListData *, bool, bool, bool) ObjectPropertyNode.cpp:362

FPropertyNode::InitNode(const FPropertyNodeInitParams &) PropertyNode.cpp:163

FCategoryPropertyNode::InitChildNodes() CategoryPropertyNode.cpp:106

FPropertyNode::RebuildChildren() PropertyNode.cpp:246

FPropertyNode::InitNode(const FPropertyNodeInitParams &) PropertyNode.cpp:223

FObjectPropertyNode::InternalInitChildNodes(FName) ObjectPropertyNode.cpp:649

FObjectPropertyNode::InitChildNodes() ObjectPropertyNode.cpp:458

FPropertyNode::RebuildChildren() PropertyNode.cpp:246

FPropertyNode::InitNode(const FPropertyNodeInitParams &) PropertyNode.cpp:223

SDetailsView::PostSetObject(const TArray<…> &) SDetailsView.cpp:872

SDetailsView::SetObjectArrayPrivate(const TArray<…> &) SDetailsView.cpp:646

SDetailsView::SetObjects(const TArray<…> &, bool, bool) SDetailsView.cpp:416

SActorDetails::SetObjects(const TArray<…> &, bool) SActorDetails.cpp:237

SLevelEditor::OnActorSelectionChanged(const TArray<…> &, bool) SLevelEditor.cpp:1765

[Inlined] Invoke(void (SLevelEditor::*)(const TArray<…> &, bool), SLevelEditor *&, const TArray<…> &, bool &) Invoke.h:65

[Inlined] UE4Tuple_Private::TTupleBase::ApplyAfter(void (SLevelEditor::*&)(const TArray<…> &, bool), SLevelEditor *&, const TArray<…> &, bool &) Tuple.h:306

TBaseSPMethodDelegateInstance::ExecuteIfSafe(const TArray<…> &, bool) DelegateInstancesImpl.h:307

[Inlined] TMulticastDelegate::Broadcast(const TArray<…> &, bool) DelegateSignatureImpl.inl:955

FLevelEditorModule::BroadcastActorSelectionChanged(const TArray<…> &, bool) LevelEditor.cpp:456

UUnrealEdEngine::UpdateFloatingPropertyWindowsFromActorList(const TArray<…> &, bool) EditorHook.cpp:63

UUnrealEdEngine::UpdateFloatingPropertyWindows(bool) EditorHook.cpp:55

UUnrealEdEngine::NoteSelectionChange(bool) EditorSelectUtils.cpp:414

FUsdStageActorImpl::DeselectActorsAndComponents(AUsdStageActor *) USDStageActor.cpp:151

AUsdStageActor::UnloadUsdStage() USDStageActor.cpp:1560

AUsdStageActor::PostUnregisterAllComponents() USDStageActor.cpp:1950

AActor::UnregisterAllComponents(bool) Actor.cpp:4600

AActor::BeginDestroy() Actor.cpp:670

UObject::ConditionalBeginDestroy() Obj.cpp:970

UnhashUnreachableObjects(bool, float) GarbageCollection.cpp:2153

CollectGarbageInternal(EObjectFlags, bool) GarbageCollection.cpp:2087

CollectGarbage(EObjectFlags, bool) GarbageCollection.cpp:2199

UEngine::TrimMemory() UnrealEngine.cpp:13506

UCheckpointSubsystem::HandleResumeFromGameInstanceCheckpoint() CheckpointSubsystem.cpp:454

UCheckpointSubsystem::StartPlay() CheckpointSubsystem.cpp:109

APiloSingleplayerGameMode::StartPlay() PiloSingleplayerGameMode.cpp:77

UWorld::BeginPlay() World.cpp:4545

UGameInstance::StartPlayInEditorGameInstance(ULocalPlayer *, const FGameInstancePIEParameters &) GameInstance.cpp:485

UEditorEngine::CreateInnerProcessPIEGameInstance(FRequestPlaySessionParams &, const FGameInstancePIEParameters &, int) PlayLevel.cpp:2972

UEditorEngine::OnLoginPIEComplete_Deferred(int, bool, FString, FPieLoginStruct) PlayLevel.cpp:1520

UEditorEngine::CreateNewPlayInEditorInstance(FRequestPlaySessionParams &, const bool, EPlayNetMode) PlayLevel.cpp:1768

UEditorEngine::StartPlayInEditorSession(FRequestPlaySessionParams &) PlayLevel.cpp:2738

UEditorEngine::StartQueuedPlaySessionRequestImpl() PlayLevel.cpp:1116

UEditorEngine::StartQueuedPlaySessionRequest() PlayLevel.cpp:1028

UEditorEngine::Tick(float, bool) EditorEngine.cpp:1629

UUnrealEdEngine::Tick(float, bool) UnrealEdEngine.cpp:423

FEngineLoop::Tick() LaunchEngineLoop.cpp:4938

[Inlined] EngineTick() Launch.cpp:62

GuardedMain(const wchar_t *) Launch.cpp:180

LaunchWindowsStartup(HINSTANCE__ *, HINSTANCE__ *, char *, int, const wchar_t *) LaunchWindows.cpp:262

WinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int) LaunchWindows.cpp:320