Skip to content

Commit 66c4e8f

Browse files
authored
fix(ai): Fix memory leaks in AIGuard states (#1350)
1 parent ebe14da commit 66c4e8f

File tree

10 files changed

+106
-25
lines changed

10 files changed

+106
-25
lines changed

Generals/Code/GameEngine/Include/GameLogic/AIGuard.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,10 @@ class AIGuardInnerState : public State
140140
{
141141
MEMORY_POOL_GLUE_WITH_USERLOOKUP_CREATE(AIGuardInnerState, "AIGuardInnerState")
142142
public:
143-
AIGuardInnerState( StateMachine *machine ) : State( machine, "AIGuardInner" ) { }
143+
AIGuardInnerState( StateMachine *machine ) : State( machine, "AIGuardInner" )
144+
{
145+
m_attackState = NULL;
146+
}
144147
virtual StateReturnType onEnter( void );
145148
virtual StateReturnType update( void );
146149
virtual void onExit( StateExitType status );
@@ -155,7 +158,6 @@ class AIGuardInnerState : public State
155158
ExitConditions m_exitConditions;
156159
AIAttackState *m_attackState;
157160
};
158-
EMPTY_DTOR(AIGuardInnerState)
159161

160162
//--------------------------------------------------------------------------------------
161163
class AIGuardIdleState : public State
@@ -202,7 +204,6 @@ class AIGuardOuterState : public State
202204
ExitConditions m_exitConditions;
203205
AIAttackState *m_attackState;
204206
};
205-
EMPTY_DTOR(AIGuardOuterState)
206207

207208
//--------------------------------------------------------------------------------------
208209
class AIGuardReturnState : public AIInternalMoveToState
@@ -261,8 +262,6 @@ class AIGuardAttackAggressorState : public State
261262
AIAttackState *m_attackState;
262263
};
263264

264-
EMPTY_DTOR(AIGuardAttackAggressorState)
265-
266265
//--------------------------------------------------------------------------------------
267266

268267
#endif /* _H_AIGUARD_ */

Generals/Code/GameEngine/Include/GameLogic/AITNGuard.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,10 @@ class AITNGuardInnerState : public State
120120
{
121121
MEMORY_POOL_GLUE_WITH_USERLOOKUP_CREATE(AITNGuardInnerState, "AITNGuardInnerState")
122122
public:
123-
AITNGuardInnerState( StateMachine *machine ) : State( machine, "AITNGuardInner" ) { }
123+
AITNGuardInnerState( StateMachine *machine ) : State( machine, "AITNGuardInner" )
124+
{
125+
m_attackState = NULL;
126+
}
124127
virtual StateReturnType onEnter( void );
125128
virtual StateReturnType update( void );
126129
virtual void onExit( StateExitType status );
@@ -136,7 +139,6 @@ class AITNGuardInnerState : public State
136139
Bool m_scanForEnemy;
137140
AIAttackState *m_attackState;
138141
};
139-
EMPTY_DTOR(AITNGuardInnerState)
140142

141143
//--------------------------------------------------------------------------------------
142144
class AITNGuardIdleState : public State
@@ -183,7 +185,6 @@ class AITNGuardOuterState : public State
183185
TunnelNetworkExitConditions m_exitConditions;
184186
AIAttackState *m_attackState;
185187
};
186-
EMPTY_DTOR(AITNGuardOuterState)
187188

188189
//--------------------------------------------------------------------------------------
189190
class AITNGuardReturnState : public AIEnterState
@@ -244,8 +245,6 @@ class AITNGuardAttackAggressorState : public State
244245
AIAttackState *m_attackState;
245246
};
246247

247-
EMPTY_DTOR(AITNGuardAttackAggressorState)
248-
249248
//--------------------------------------------------------------------------------------
250249

251250
#endif /* _H_AIGUARD_ */

Generals/Code/GameEngine/Source/GameLogic/AI/AIGuard.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,12 @@ void AIGuardInnerState::loadPostProcess( void )
349349
onEnter();
350350
} // end loadPostProcess
351351

352+
// ------------------------------------------------------------------------------------------------
353+
AIGuardInnerState::~AIGuardInnerState(void)
354+
{
355+
deleteInstance(m_attackState);
356+
}
357+
352358
//--------------------------------------------------------------------------------------
353359
StateReturnType AIGuardInnerState::onEnter( void )
354360
{
@@ -436,6 +442,12 @@ void AIGuardOuterState::loadPostProcess( void )
436442
onEnter();
437443
} // end loadPostProcess
438444

445+
// ------------------------------------------------------------------------------------------------
446+
AIGuardOuterState::~AIGuardOuterState(void)
447+
{
448+
deleteInstance(m_attackState);
449+
}
450+
439451
//--------------------------------------------------------------------------------------
440452
StateReturnType AIGuardOuterState::onEnter( void )
441453
{
@@ -739,6 +751,12 @@ AIGuardAttackAggressorState::AIGuardAttackAggressorState( StateMachine *machine
739751
m_attackState = NULL;
740752
}
741753

754+
// ------------------------------------------------------------------------------------------------
755+
AIGuardAttackAggressorState::~AIGuardAttackAggressorState(void)
756+
{
757+
deleteInstance(m_attackState);
758+
}
759+
742760
//-------------------------------------------------------------------------------------------------
743761
StateReturnType AIGuardAttackAggressorState::onEnter( void )
744762
{

Generals/Code/GameEngine/Source/GameLogic/AI/AITNGuard.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,12 @@ void AITNGuardInnerState::loadPostProcess( void )
319319
onEnter();
320320
} // end loadPostProcess
321321

322+
// ------------------------------------------------------------------------------------------------
323+
AITNGuardInnerState::~AITNGuardInnerState(void)
324+
{
325+
deleteInstance(m_attackState);
326+
}
327+
322328
//--------------------------------------------------------------------------------------
323329
StateReturnType AITNGuardInnerState::onEnter( void )
324330
{
@@ -457,6 +463,12 @@ void AITNGuardOuterState::loadPostProcess( void )
457463
onEnter();
458464
} // end loadPostProcess
459465

466+
// ------------------------------------------------------------------------------------------------
467+
AITNGuardOuterState::~AITNGuardOuterState(void)
468+
{
469+
deleteInstance(m_attackState);
470+
}
471+
460472
//--------------------------------------------------------------------------------------
461473
StateReturnType AITNGuardOuterState::onEnter( void )
462474
{
@@ -766,6 +778,12 @@ AITNGuardAttackAggressorState::AITNGuardAttackAggressorState( StateMachine *mach
766778
m_attackState = NULL;
767779
}
768780

781+
// ------------------------------------------------------------------------------------------------
782+
AITNGuardAttackAggressorState::~AITNGuardAttackAggressorState(void)
783+
{
784+
deleteInstance(m_attackState);
785+
}
786+
769787
//-------------------------------------------------------------------------------------------------
770788
StateReturnType AITNGuardAttackAggressorState::onEnter( void )
771789
{

GeneralsMD/Code/GameEngine/Include/GameLogic/AIGuard.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,8 @@ class AIGuardInnerState : public State
142142
public:
143143
AIGuardInnerState( StateMachine *machine ) : State( machine, "AIGuardInner" )
144144
{
145-
m_attackState = 0;
146-
m_enterState = 0;
145+
m_attackState = NULL;
146+
m_enterState = NULL;
147147
}
148148
virtual Bool isAttack() const { return m_attackState ? m_attackState->isAttack() : FALSE; }
149149
virtual StateReturnType onEnter( void );
@@ -161,7 +161,6 @@ class AIGuardInnerState : public State
161161
AIAttackState *m_attackState;
162162
AIEnterState *m_enterState;
163163
};
164-
EMPTY_DTOR(AIGuardInnerState)
165164

166165
//--------------------------------------------------------------------------------------
167166
class AIGuardIdleState : public State
@@ -211,7 +210,6 @@ class AIGuardOuterState : public State
211210
ExitConditions m_exitConditions;
212211
AIAttackState *m_attackState;
213212
};
214-
EMPTY_DTOR(AIGuardOuterState)
215213

216214
//--------------------------------------------------------------------------------------
217215
class AIGuardReturnState : public AIInternalMoveToState
@@ -273,8 +271,6 @@ class AIGuardAttackAggressorState : public State
273271
AIAttackState *m_attackState;
274272
};
275273

276-
EMPTY_DTOR(AIGuardAttackAggressorState)
277-
278274
//--------------------------------------------------------------------------------------
279275

280276
#endif /* _H_AIGUARD_ */

GeneralsMD/Code/GameEngine/Include/GameLogic/AIGuardRetaliate.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ class AIGuardRetaliateInnerState : public State
149149
AIAttackState *m_attackState;
150150
AIEnterState *m_enterState;
151151
};
152-
EMPTY_DTOR(AIGuardRetaliateInnerState)
153152

154153
//--------------------------------------------------------------------------------------
155154
class AIGuardRetaliateIdleState : public State
@@ -196,7 +195,6 @@ class AIGuardRetaliateOuterState : public State
196195
GuardRetaliateExitConditions m_exitConditions;
197196
AIAttackState *m_attackState;
198197
};
199-
EMPTY_DTOR(AIGuardRetaliateOuterState)
200198

201199
//--------------------------------------------------------------------------------------
202200
class AIGuardRetaliateReturnState : public AIInternalMoveToState
@@ -258,8 +256,6 @@ class AIGuardRetaliateAttackAggressorState : public State
258256
AIAttackState *m_attackState;
259257
};
260258

261-
EMPTY_DTOR(AIGuardRetaliateAttackAggressorState)
262-
263259
//--------------------------------------------------------------------------------------
264260

265261
#endif

GeneralsMD/Code/GameEngine/Include/GameLogic/AITNGuard.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,10 @@ class AITNGuardInnerState : public State
120120
{
121121
MEMORY_POOL_GLUE_WITH_USERLOOKUP_CREATE(AITNGuardInnerState, "AITNGuardInnerState")
122122
public:
123-
AITNGuardInnerState( StateMachine *machine ) : State( machine, "AITNGuardInner" ) { }
123+
AITNGuardInnerState( StateMachine *machine ) : State( machine, "AITNGuardInner" )
124+
{
125+
m_attackState = NULL;
126+
}
124127
virtual StateReturnType onEnter( void );
125128
virtual StateReturnType update( void );
126129
virtual void onExit( StateExitType status );
@@ -136,7 +139,6 @@ class AITNGuardInnerState : public State
136139
Bool m_scanForEnemy;
137140
AIAttackState *m_attackState;
138141
};
139-
EMPTY_DTOR(AITNGuardInnerState)
140142

141143
//--------------------------------------------------------------------------------------
142144
class AITNGuardIdleState : public State
@@ -183,7 +185,6 @@ class AITNGuardOuterState : public State
183185
TunnelNetworkExitConditions m_exitConditions;
184186
AIAttackState *m_attackState;
185187
};
186-
EMPTY_DTOR(AITNGuardOuterState)
187188

188189
//--------------------------------------------------------------------------------------
189190
class AITNGuardReturnState : public AIEnterState
@@ -244,8 +245,6 @@ class AITNGuardAttackAggressorState : public State
244245
AIAttackState *m_attackState;
245246
};
246247

247-
EMPTY_DTOR(AITNGuardAttackAggressorState)
248-
249248
//--------------------------------------------------------------------------------------
250249

251250
#endif /* _H_AIGUARD_ */

GeneralsMD/Code/GameEngine/Source/GameLogic/AI/AIGuard.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,13 @@ void AIGuardInnerState::loadPostProcess( void )
377377
onEnter();
378378
} // end loadPostProcess
379379

380+
// ------------------------------------------------------------------------------------------------
381+
AIGuardInnerState::~AIGuardInnerState(void)
382+
{
383+
deleteInstance(m_attackState);
384+
deleteInstance(m_enterState);
385+
}
386+
380387
//--------------------------------------------------------------------------------------
381388
StateReturnType AIGuardInnerState::onEnter( void )
382389
{
@@ -501,6 +508,12 @@ void AIGuardOuterState::loadPostProcess( void )
501508
onEnter();
502509
} // end loadPostProcess
503510

511+
// ------------------------------------------------------------------------------------------------
512+
AIGuardOuterState::~AIGuardOuterState(void)
513+
{
514+
deleteInstance(m_attackState);
515+
}
516+
504517
//--------------------------------------------------------------------------------------
505518
StateReturnType AIGuardOuterState::onEnter( void )
506519
{
@@ -804,6 +817,12 @@ AIGuardAttackAggressorState::AIGuardAttackAggressorState( StateMachine *machine
804817
m_attackState = NULL;
805818
}
806819

820+
// ------------------------------------------------------------------------------------------------
821+
AIGuardAttackAggressorState::~AIGuardAttackAggressorState(void)
822+
{
823+
deleteInstance(m_attackState);
824+
}
825+
807826
//-------------------------------------------------------------------------------------------------
808827
StateReturnType AIGuardAttackAggressorState::onEnter( void )
809828
{

GeneralsMD/Code/GameEngine/Source/GameLogic/AI/AIGuardRetaliate.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,13 @@ void AIGuardRetaliateInnerState::loadPostProcess( void )
359359
onEnter();
360360
} // end loadPostProcess
361361

362+
// ------------------------------------------------------------------------------------------------
363+
AIGuardRetaliateInnerState::~AIGuardRetaliateInnerState(void)
364+
{
365+
deleteInstance(m_attackState);
366+
deleteInstance(m_enterState);
367+
}
368+
362369
//--------------------------------------------------------------------------------------
363370
StateReturnType AIGuardRetaliateInnerState::onEnter( void )
364371
{
@@ -475,6 +482,12 @@ void AIGuardRetaliateOuterState::loadPostProcess( void )
475482
onEnter();
476483
} // end loadPostProcess
477484

485+
// ------------------------------------------------------------------------------------------------
486+
AIGuardRetaliateOuterState::~AIGuardRetaliateOuterState(void)
487+
{
488+
deleteInstance(m_attackState);
489+
}
490+
478491
//--------------------------------------------------------------------------------------
479492
StateReturnType AIGuardRetaliateOuterState::onEnter( void )
480493
{
@@ -756,6 +769,12 @@ AsciiString AIGuardRetaliateAttackAggressorState::getName( ) const
756769
}
757770
#endif
758771

772+
// ------------------------------------------------------------------------------------------------
773+
AIGuardRetaliateAttackAggressorState::~AIGuardRetaliateAttackAggressorState(void)
774+
{
775+
deleteInstance(m_attackState);
776+
}
777+
759778
//-------------------------------------------------------------------------------------------------
760779
StateReturnType AIGuardRetaliateAttackAggressorState::onEnter( void )
761780
{

GeneralsMD/Code/GameEngine/Source/GameLogic/AI/AITNGuard.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,12 @@ void AITNGuardInnerState::loadPostProcess( void )
319319
onEnter();
320320
} // end loadPostProcess
321321

322+
// ------------------------------------------------------------------------------------------------
323+
AITNGuardInnerState::~AITNGuardInnerState(void)
324+
{
325+
deleteInstance(m_attackState);
326+
}
327+
322328
//--------------------------------------------------------------------------------------
323329
StateReturnType AITNGuardInnerState::onEnter( void )
324330
{
@@ -457,6 +463,12 @@ void AITNGuardOuterState::loadPostProcess( void )
457463
onEnter();
458464
} // end loadPostProcess
459465

466+
// ------------------------------------------------------------------------------------------------
467+
AITNGuardOuterState::~AITNGuardOuterState(void)
468+
{
469+
deleteInstance(m_attackState);
470+
}
471+
460472
//--------------------------------------------------------------------------------------
461473
StateReturnType AITNGuardOuterState::onEnter( void )
462474
{
@@ -778,6 +790,12 @@ AITNGuardAttackAggressorState::AITNGuardAttackAggressorState( StateMachine *mach
778790
m_attackState = NULL;
779791
}
780792

793+
// ------------------------------------------------------------------------------------------------
794+
AITNGuardAttackAggressorState::~AITNGuardAttackAggressorState(void)
795+
{
796+
deleteInstance(m_attackState);
797+
}
798+
781799
//-------------------------------------------------------------------------------------------------
782800
StateReturnType AITNGuardAttackAggressorState::onEnter( void )
783801
{

0 commit comments

Comments
 (0)