AbilitySystemComponent crashes when RemoveActiveGameplayEffect is called during world teardown for an active gameplay effect that ticks periodically, by unsafe GetWorld()->GetTimerManager() access with GetWorld() returning null. Found in 5.1.1, reproducable in 5.2.0 candidate.
Client created repro project is attached. I recommend launching that project, opening the map 'PersistentMap', then starting and stopping PIE.
Otherwise, manual repro instructions:
> UnrealEditor-Engine.dll!UWorld::GetTimerManager() Line 3960 C++
UnrealEditor-GameplayAbilities.dll!FActiveGameplayEffectsContainer::InternalRemoveActiveGameplayEffect(int Idx, int StacksToRemove, bool bPrematureRemoval) Line 3592 C++
UnrealEditor-GameplayAbilities.dll!FActiveGameplayEffectsContainer::RemoveActiveEffects(const FGameplayEffectQuery & Query, int StacksToRemove) Line 4476 C++
UnrealEditor-GameplayAbilities.dll!UAbilitySystemComponent::RemoveActiveGameplayEffectBySourceEffect(TSubclassOf<UGameplayEffect> GameplayEffect, UAbilitySystemComponent * InstigatorAbilitySystemComponent, int StacksToRemove) Line 1077 C++
UnrealEditor-GameplayAbilities.dll!UAbilitySystemComponent::execRemoveActiveGameplayEffectBySourceEffect(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 1004 C++
UnrealEditor-CoreUObject.dll!UFunction::Invoke(UObject * Obj, FFrame & Stack, void * const Z_Param__Result) Line 6455 C++
UnrealEditor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 1129 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FFrame::Step(UObject *) Line 467 C++
UnrealEditor-CoreUObject.dll!UObject::ProcessContextOpcode(FFrame & Stack, void * const Z_Param__Result, bool bCanFailSilently) Line 3139 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FFrame::Step(UObject *) Line 467 C++
UnrealEditor-CoreUObject.dll!ProcessLocalScriptFunction(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 1199 C++
UnrealEditor-CoreUObject.dll!ProcessScriptFunction<void (_cdecl*)(UObject *,FFrame &,void *)>(UObject * Context, UFunction * Function, FFrame & Stack, void * const Z_Param_Result, void[Image Removed](UObject *, FFrame &, void *) ExecFtor) Line 1029 C++
UnrealEditor-CoreUObject.dll!ProcessLocalFunction(UObject * Context, UFunction * Fn, FFrame & Stack, void * const Z_Param__Result) Line 1269 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FFrame::Step(UObject *) Line 467 C++
UnrealEditor-CoreUObject.dll!ProcessLocalScriptFunction(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 1199 C++
UnrealEditor-CoreUObject.dll!UObject::ProcessInternal(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 1296 C++
UnrealEditor-CoreUObject.dll!UFunction::Invoke(UObject * Obj, FFrame & Stack, void * const Z_Param__Result) Line 6455 C++
UnrealEditor-CoreUObject.dll!UObject::ProcessEvent(UFunction * Function, void * Parms) Line 2127 C++
UnrealEditor-GameplayAbilities.dll!UGameplayAbility::K2_OnEndAbility(bool bWasCancelled) Line 604 C++
UnrealEditor-GameplayAbilities.dll!UGameplayAbility::EndAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo * ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled) Line 637 C++
UnrealEditor-GameplayAbilities.dll!UGameplayAbility::CancelAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo * ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateCancelAbility) Line 584 C++
UnrealEditor-GameplayAbilities.dll!UAbilitySystemComponent::CancelAbilitySpec(FGameplayAbilitySpec & Spec, UGameplayAbility * Ignore) Line 1113 C++
[Inline Frame] UnrealEditor-GameplayAbilities.dll!UAbilitySystemComponent::CancelAbilities(const FGameplayTagContainer *) Line 1100 C++
UnrealEditor-GameplayAbilities.dll!UAbilitySystemComponent::DestroyActiveState() Line 1156 C++
UnrealEditor-Engine.dll!UActorComponent::ExecuteUnregisterEvents() Line 1707 C++
UnrealEditor-Engine.dll!UActorComponent::UnregisterComponent() Line 1423 C++
UnrealEditor-Engine.dll!AActor::UnregisterAllComponents(bool bForReregister) Line 5166 C++
UnrealEditor-Engine.dll!ULevel::ClearLevelComponents() Line 1376 C++
UnrealEditor-Engine.dll!UWorld::ClearWorldComponents() Line 2254 C++
UnrealEditor-Engine.dll!UWorld::CleanupWorldInternal(bool bSessionEnded, bool bCleanupResources, bool bWorldChanged) Line 4975 C++
UnrealEditor-Engine.dll!UWorld::CleanupWorld(bool bSessionEnded, bool bCleanupResources, UWorld * NewWorld) Line 4914 C++
UnrealEditor-UnrealEd.dll!UEditorEngine::TeardownPlaySession(FWorldContext & PieWorldContext) Line 873 C++
UnrealEditor-UnrealEd.dll!UEditorEngine::EndPlayMap() Line 339 C++
UnrealEditor-UnrealEd.dll!UEditorEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 2210 C++
UnrealEditor-UnrealEd.dll!UUnrealEdEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 517 C++
UnrealEditor.exe!FEngineLoop::Tick() Line 5369 C++
[Inline Frame] UnrealEditor.exe!EngineTick() Line 66 C++
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-178955 in the post.
0 |
Component | UE - Gameplay - Gameplay Ability System |
---|---|
Affects Versions | 5.0, 5.1, 5.2 |
Target Fix | 5.3 |
Fix Commit | 24495977 |
---|
Created | Mar 2, 2023 |
---|---|
Resolved | Mar 9, 2023 |
Updated | Sep 21, 2023 |