From 88885dc36c0b52b37655acf572ed6b953b1cbfe8 Mon Sep 17 00:00:00 2001 From: xezon <4720891+xezon@users.noreply.github.com> Date: Sun, 11 May 2025 15:21:18 +0200 Subject: [PATCH] [GEN][ZH] Fix memory leak in SpecialAbilityUpdate::isWithinStartAbilityRange() --- .../Source/GameLogic/Object/Update/SpecialAbilityUpdate.cpp | 1 + .../Source/GameLogic/Object/Update/SpecialAbilityUpdate.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/Update/SpecialAbilityUpdate.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/Update/SpecialAbilityUpdate.cpp index 3962be8f6b..4a08bd399f 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/Update/SpecialAbilityUpdate.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/Update/SpecialAbilityUpdate.cpp @@ -776,6 +776,7 @@ Bool SpecialAbilityUpdate::isWithinStartAbilityRange() const PartitionFilterLineOfSight filterLOS( self ); PartitionFilter *filters[] = { &filterLOS, NULL }; ObjectIterator *iter = ThePartitionManager->iterateObjectsInRange( self, range, FROM_BOUNDINGSPHERE_2D, filters, ITER_SORTED_NEAR_TO_FAR ); + MemoryPoolObjectHolder hold(iter); for( Object *theTarget = iter->first(); theTarget; theTarget = iter->next() ) { //LOS check succeeded. diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/SpecialAbilityUpdate.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/SpecialAbilityUpdate.cpp index 4b69015a86..f38cf423b8 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/SpecialAbilityUpdate.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/SpecialAbilityUpdate.cpp @@ -880,6 +880,7 @@ Bool SpecialAbilityUpdate::isWithinStartAbilityRange() const PartitionFilterLineOfSight filterLOS( self ); PartitionFilter *filters[] = { &filterLOS, NULL }; ObjectIterator *iter = ThePartitionManager->iterateObjectsInRange( self, range, FROM_BOUNDINGSPHERE_2D, filters, ITER_SORTED_NEAR_TO_FAR ); + MemoryPoolObjectHolder hold(iter); for( Object *theTarget = iter->first(); theTarget; theTarget = iter->next() ) { //LOS check succeeded.