Skip to content

Commit 7605546

Browse files
authored
[GEN][ZH] Fix use of invalidated iterator in ScriptEngine::reset() (#1273)
1 parent 2e69d53 commit 7605546

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

Generals/Code/GameEngine/Source/GameLogic/ScriptEngine/ScriptEngine.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4639,10 +4639,18 @@ void ScriptEngine::reset( void )
46394639

46404640
_updateCurrentParticleCap();
46414641

4642-
VecSequentialScriptPtrIt seqScriptIt;
4643-
for (seqScriptIt = m_sequentialScripts.begin(); seqScriptIt != m_sequentialScripts.end(); ) {
4644-
cleanupSequentialScript(seqScriptIt, TRUE);
4642+
// delete and clear all sequential scripts.
4643+
VecSequentialScriptPtrIt seqScriptIt = m_sequentialScripts.begin();
4644+
while (seqScriptIt != m_sequentialScripts.end()) {
4645+
SequentialScript* seqScript = *seqScriptIt;
4646+
while (seqScript != NULL) {
4647+
SequentialScript* scriptToDelete = seqScript;
4648+
seqScript = seqScript->m_nextScriptInSequence;
4649+
deleteInstance(scriptToDelete);
4650+
}
4651+
++seqScriptIt;
46454652
}
4653+
m_sequentialScripts.clear();
46464654

46474655
// clear out all the lists of object types that were in the old map.
46484656
for (AllObjectTypesIt it = m_allObjectTypeLists.begin(); it != m_allObjectTypeLists.end(); it = m_allObjectTypeLists.begin() ) {

GeneralsMD/Code/GameEngine/Source/GameLogic/ScriptEngine/ScriptEngine.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5374,10 +5374,18 @@ void ScriptEngine::reset( void )
53745374

53755375
_updateCurrentParticleCap();
53765376

5377-
VecSequentialScriptPtrIt seqScriptIt;
5378-
for (seqScriptIt = m_sequentialScripts.begin(); seqScriptIt != m_sequentialScripts.end(); ) {
5379-
cleanupSequentialScript(seqScriptIt, TRUE);
5377+
// delete and clear all sequential scripts.
5378+
VecSequentialScriptPtrIt seqScriptIt = m_sequentialScripts.begin();
5379+
while (seqScriptIt != m_sequentialScripts.end()) {
5380+
SequentialScript* seqScript = *seqScriptIt;
5381+
while (seqScript != NULL) {
5382+
SequentialScript* scriptToDelete = seqScript;
5383+
seqScript = seqScript->m_nextScriptInSequence;
5384+
deleteInstance(scriptToDelete);
5385+
}
5386+
++seqScriptIt;
53805387
}
5388+
m_sequentialScripts.clear();
53815389

53825390
// clear out all the lists of object types that were in the old map.
53835391
for (AllObjectTypesIt it = m_allObjectTypeLists.begin(); it != m_allObjectTypeLists.end(); it = m_allObjectTypeLists.begin() ) {

0 commit comments

Comments
 (0)