Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Seg-fault when using FlyTo BT node in sub-level BTs with Recalculate Path Tolerance enabled #21

Open
chillpert opened this issue Nov 9, 2022 · 0 comments

Comments

@chillpert
Copy link

The following trivial BT setup causes a crash:

  • Main BT: ROOT → Selector (empty) → Run Behavior (sub-level BT)
  • Sub-level BT: ROOT → Selector (empty) → Don's Fly To Node (Flight Location Key: PlayerLocation; Recalculate Path Tolerance: true)

Only within a few seconds on an empty map with just one flying AI-enabled pawn and a player character, the following segmentation fault can be observed:

Caught signal 11 Segmentation fault

libUnrealEditor-DonAINavigation.so!UBTTask_FlyTo::OnBlackboardValueChange(UBlackboardComponent const&, unsigned char) [/home/TheGame/Plugins/DonAINavigation/Source/DonAINavigation/Private/BehaviorTree/BTTask_FlyTo.cpp:466]
libUnrealEditor-AIModule.so!UBlackboardComponent::NotifyObservers(unsigned char) const [/mnt/data/unrealengine/Engine/Source/./Runtime/AIModule/Private/BehaviorTree/BlackboardComponent.cpp:425]
libUnrealEditor-AIModule.so!bool UBlackboardComponent::SetValue<UBlackboardKeyType_Vector>(unsigned char, UBlackboardKeyType_Vector::FDataType) [/mnt/data/unrealengine/Engine/Source/Runtime/AIModule/Classes/BehaviorTree/BlackboardComponent.h:348]
libUnrealEditor-Utility.so!UAILibrary::SetBlackboardValueAsVector(AAIController*, FString const&, UE::Math::TVector<double> const&) [/home/TheGame/Source/Utility/Private/AILibrary.cpp:60]
libUnrealEditor-Utility.so!UAILibrary::execSetBlackboardValueAsVector(UObject*, FFrame&, void*) [/home/TheGame/Intermediate/Build/Linux/B4D820EA/UnrealEditor/Inc/Utility/AILibrary.gen.cpp:37]
libUnrealEditor-CoreUObject.so!UObject::execCallMathFunction(UObject*, FFrame&, void*) [/mnt/data/unrealengine/Engine/Source/./Runtime/CoreUObject/Private/UObject/ScriptCore.cpp:945]
libUnrealEditor-CoreUObject.so!ProcessLocalScriptFunction(UObject*, FFrame&, void*) [/mnt/data/unrealengine/Engine/Source/./Runtime/CoreUObject/Private/UObject/ScriptCore.cpp:1109]
libUnrealEditor-CoreUObject.so!void ProcessScriptFunction<void (*)(UObject*, FFrame&, void*)>(UObject*, UFunction*, FFrame&, void*, void (*)(UObject*, FFrame&, void*)) [/mnt/data/unrealengine/Engine/Source/./Runtime/CoreUObject/Private/UObject/ScriptCore.cpp:909]
libUnrealEditor-CoreUObject.so!ProcessLocalFunction(UObject*, UFunction*, FFrame&, void*) [/mnt/data/unrealengine/Engine/Source/./Runtime/CoreUObject/Private/UObject/ScriptCore.cpp:1143]
libUnrealEditor-CoreUObject.so!ProcessLocalScriptFunction(UObject*, FFrame&, void*) [/mnt/data/unrealengine/Engine/Source/./Runtime/CoreUObject/Private/UObject/ScriptCore.cpp:1109]
libUnrealEditor-CoreUObject.so!void ProcessScriptFunction<void (*)(UObject*, FFrame&, void*)>(UObject*, UFunction*, FFrame&, void*, void (*)(UObject*, FFrame&, void*)) [/mnt/data/unrealengine/Engine/Source/./Runtime/CoreUObject/Private/UObject/ScriptCore.cpp:909]
libUnrealEditor-CoreUObject.so!ProcessLocalFunction(UObject*, UFunction*, FFrame&, void*) [/mnt/data/unrealengine/Engine/Source/./Runtime/CoreUObject/Private/UObject/ScriptCore.cpp:1143]
libUnrealEditor-CoreUObject.so!ProcessLocalScriptFunction(UObject*, FFrame&, void*) [/mnt/data/unrealengine/Engine/Source/./Runtime/CoreUObject/Private/UObject/ScriptCore.cpp:1109]
libUnrealEditor-CoreUObject.so!UFunction::Invoke(UObject*, FFrame&, void*) [/mnt/data/unrealengine/Engine/Source/./Runtime/CoreUObject/Private/UObject/Class.cpp:5912]
libUnrealEditor-CoreUObject.so!UObject::ProcessEvent(UFunction*, void*) [/mnt/data/unrealengine/Engine/Source/./Runtime/CoreUObject/Private/UObject/ScriptCore.cpp:2001]
libUnrealEditor-Engine.so!AActor::ProcessEvent(UFunction*, void*) [/mnt/data/unrealengine/Engine/Source/./Runtime/Engine/Private/Actor.cpp:1030]
libUnrealEditor-Engine.so!AActor::ReceiveTick(float) [/mnt/data/unrealengine/Engine/Source/./../Intermediate/Build/Linux/B4D820EA/UnrealEditor/Inc/Engine/Actor.gen.cpp:2053]
libUnrealEditor-Engine.so!AActor::Tick(float) [/mnt/data/unrealengine/Engine/Source/./Runtime/Engine/Private/Actor.cpp:1370]
libUnrealEditor-AIModule.so!AAIController::Tick(float) [/mnt/data/unrealengine/Engine/Source/./Runtime/AIModule/Private/AIController.cpp:56]
libUnrealEditor-Engine.so!FActorTickFunction::ExecuteTick(float, ELevelTick, ENamedThreads::Type, TRefCountPtr<FGraphEvent> const&) [/mnt/data/unrealengine/Engine/Source/./Runtime/Engine/Private/Actor.cpp:197]
libUnrealEditor-Engine.so!FTickFunctionTask::DoTask(ENamedThreads::Type, TRefCountPtr<FGraphEvent> const&) [/mnt/data/unrealengine/Engine/Source/./Runtime/Engine/Private/TickTaskManager.cpp:284]
libUnrealEditor-Engine.so!TGraphTask<FTickFunctionTask>::ExecuteTask(TArray<FBaseGraphTask*, TSizedDefaultAllocator<32> >&, ENamedThreads::Type, bool) [/mnt/data/unrealengine/Engine/Source/Runtime/Core/Public/Async/TaskGraphInterfaces.h:975]
libUnrealEditor-Core.so!FNamedTaskThread::ProcessTasksNamedThread(int, bool) [/mnt/data/unrealengine/Engine/Source/./Runtime/Core/Private/Async/TaskGraph.cpp:753]
libUnrealEditor-Core.so!FNamedTaskThread::ProcessTasksUntilQuit(int) [/mnt/data/unrealengine/Engine/Source/./Runtime/Core/Private/Async/TaskGraph.cpp:641]
libUnrealEditor-Core.so!FTaskGraphCompatibilityImplementation::ProcessThreadUntilRequestReturn(ENamedThreads::Type) [/mnt/data/unrealengine/Engine/Source/./Runtime/Core/Private/Async/TaskGraph.cpp:2114]
libUnrealEditor-Core.so!FTaskGraphCompatibilityImplementation::WaitUntilTasksComplete(TArray<TRefCountPtr<FGraphEvent>, TSizedInlineAllocator<4u, 32, TSizedDefaultAllocator<32> > > const&, ENamedThreads::Type) [/mnt/data/unrealengine/Engine/Source/./Runtime/Core/Private/Async/TaskGraph.cpp:2168]
libUnrealEditor-Engine.so!FTickTaskSequencer::ReleaseTickGroup(ETickingGroup, bool) [/mnt/data/unrealengine/Engine/Source/./Runtime/Engine/Private/TickTaskManager.cpp:564]
libUnrealEditor-Engine.so!FTickTaskManager::RunTickGroup(ETickingGroup, bool) [/mnt/data/unrealengine/Engine/Source/./Runtime/Engine/Private/TickTaskManager.cpp:1591]
libUnrealEditor-Engine.so!UWorld::Tick(ELevelTick, float) [/mnt/data/unrealengine/Engine/Source/./Runtime/Engine/Private/LevelTick.cpp:1531]
libUnrealEditor-UnrealEd.so!UEditorEngine::Tick(float, bool) [/mnt/data/unrealengine/Engine/Source/./Editor/UnrealEd/Private/EditorEngine.cpp:1775]
libUnrealEditor-UnrealEd.so!UUnrealEdEngine::Tick(float, bool) [/mnt/data/unrealengine/Engine/Source/./Editor/UnrealEd/Private/UnrealEdEngine.cpp:471]
UnrealEditor!FEngineLoop::Tick() [/mnt/data/unrealengine/Engine/Source/./Runtime/Launch/Private/LaunchEngineLoop.cpp:5209]
UnrealEditor!GuardedMain(char16_t const*) [/mnt/data/unrealengine/Engine/Source/./Runtime/Launch/Private/Launch.cpp:185]
libUnrealEditor-UnixCommonStartup.so!CommonUnixMain(int, char**, int (*)(char16_t const*), void (*)()) [/mnt/data/unrealengine/Engine/Source/Runtime/Unix/UnixCommonStartup/Private/UnixCommonStartup.cpp:264]
libc.so.6!UnknownFunction(0x2328f)
libc.so.6!__libc_start_main(+0x89)
UnrealEditor!_start()

It works fine if you use the Fly To node in the 'root' BT instead of the sub-level BT. The player location is valid, gets updated every frame, and is within the navigation volume at all times.

I am using this fork of the plugin but from my testing the issue also occurs with the original plugin (after fixing up compilation errors). In case you are using the original plugin, the crash happens at BTTask_FlyTo.cpp:456 with the same callstack. With my limited knowledge on the C++ side of BTs and the plugin itself, I was not able to fix this issue yet, so any help is highly appreciated.

Tested on Windows 10 and Linux with UE-5.0.3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant