Description

UParticleSystemComponent::SetComponentTickEnabled can fail to disable ticking due to IsTickedManaged not checking if the particles system is pending registration.

The crash was in part because of customer code, but the failure to unregister the component is present without their code.

Steps to Reproduce
  1. Download Attached project
  2. Extract and run
  3. Open the map "NewMap"
  4. PIE

RESULT

A crash will occur. There is also a particle system that continues to tick after being disabled.

Callstack

> UE4Editor-Engine.dll!UParticleSystemComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction * ThisTickFunction) Line 5110 C+> UE4Editor-Engine.dll!UParticleSystemComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction * ThisTickFunction) Line 5110 C  UE4Editor-Engine.dll!FParticleSystemWorldManager::ProcessTickList<0>(float DeltaTime, ELevelTick TickType, ETickingGroup TickGroup, TArray<FParticleSystemWorldManager::FTickList,TSizedDefaultAllocator<32>> & TickLists, const TRefCountPtr<FGraphEvent> & TickGroupCompletionGraphEvent) Line 603 C  UE4Editor-Engine.dll!FParticleSystemWorldManager::Tick(ETickingGroup TickGroup, float DeltaTime, ELevelTick TickType, ENamedThreads::Type CurrentThread, const TRefCountPtr<FGraphEvent> & MyCompletionGraphEvent) Line 705 C  UE4Editor-Engine.dll!FParticleSystemWorldManagerTickFunction::ExecuteTick(float DeltaTime, ELevelTick TickType, ENamedThreads::Type CurrentThread, const TRefCountPtr<FGraphEvent> & MyCompletionGraphEvent) Line 806 C  UE4Editor-Engine.dll!FTickFunctionTask::DoTask(ENamedThreads::Type CurrentThread, const TRefCountPtr<FGraphEvent> & MyCompletionGraphEvent) Line 284 C  UE4Editor-Engine.dll!TGraphTask<FTickFunctionTask>::ExecuteTask(TArray<FBaseGraphTask *,TSizedDefaultAllocator<32>> & NewTasks, ENamedThreads::Type CurrentThread) Line 886 C  [Inline Frame] UE4Editor-Core.dll!FBaseGraphTask::Execute(TArray<FBaseGraphTask *,TSizedDefaultAllocator<32>> & CurrentThread, ENamedThreads::Type) Line 524 C  UE4Editor-Core.dll!FNamedTaskThread::ProcessTasksNamedThread(int QueueIndex, bool bAllowStall) Line 709 C  UE4Editor-Core.dll!FNamedTaskThread::ProcessTasksUntilQuit(int QueueIndex) Line 601 C  [Inline Frame] UE4Editor-Core.dll!FTaskGraphImplementation::ProcessThreadUntilRequestReturn(ENamedThreads::Type CurrentThread) Line 1473 C  UE4Editor-Core.dll!FTaskGraphImplementation::WaitUntilTasksComplete(const TArray<TRefCountPtr<FGraphEvent>,TInlineAllocator<4,TSizedDefaultAllocator<32>>> & Tasks, ENamedThreads::Type CurrentThreadIfKnown) Line 1525 C  UE4Editor-Engine.dll!FTickTaskSequencer::ReleaseTickGroup(ETickingGroup WorldTickGroup, bool bBlockTillComplete) Line 564 C  UE4Editor-Engine.dll!FTickTaskManager::RunTickGroup(ETickingGroup Group, bool bBlockTillComplete) Line 1578 C  UE4Editor-Engine.dll!UWorld::RunTickGroup(ETickingGroup Group, bool bBlockTillComplete) Line 782 C  UE4Editor-Engine.dll!UWorld::Tick(ELevelTick TickType, float DeltaSeconds) Line 1457 C  UE4Editor-UnrealEd.dll!UEditorEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 1720 C  UE4Editor-UnrealEd.dll!UUnrealEdEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 426 C  UE4Editor-Win64-DebugGame.exe!FEngineLoop::Tick() Line 4836 C  [Inline Frame] UE4Editor-Win64-DebugGame.exe!EngineTick() Line 62 C  UE4Editor-Win64-DebugGame.exe!GuardedMain(const wchar_t * CmdLine) Line 169 C  UE4Editor-Win64-DebugGame.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 257 C+

Have Comments or More Details?

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

2
Login to Vote

Cannot Reproduce
ComponentUE - Niagara
CreatedMar 31, 2021
ResolvedJun 9, 2021
UpdatedSep 19, 2021