aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Hesse2009-06-22 10:16:45 +0000
committerSven Hesse2009-06-22 10:16:45 +0000
commit850203fc730a0888206e04431425b19fe414e0db (patch)
treeb92dfc65da30faa3721b143eefd6004c556c7895
parent648139dda7e759ebc2ee8d45301698c8b447a63d (diff)
downloadscummvm-rg350-850203fc730a0888206e04431425b19fe414e0db.tar.gz
scummvm-rg350-850203fc730a0888206e04431425b19fe414e0db.tar.bz2
scummvm-rg350-850203fc730a0888206e04431425b19fe414e0db.zip
Unwinding the call stack before unloading the script
svn-id: r41759
-rw-r--r--engines/gob/game_v1.cpp3
-rw-r--r--engines/gob/game_v2.cpp3
-rw-r--r--engines/gob/script.cpp3
3 files changed, 7 insertions, 2 deletions
diff --git a/engines/gob/game_v1.cpp b/engines/gob/game_v1.cpp
index f038c7edc3..1a530fa4f6 100644
--- a/engines/gob/game_v1.cpp
+++ b/engines/gob/game_v1.cpp
@@ -242,7 +242,8 @@ void Game_v1::playTot(int16 skipPlay) {
_vm->_inter->_breakFromLevel = oldBreakFrom;
_vm->_scenery->_pCaptureCounter = oldCaptureCounter;
- _script->pop();
+ if (_script->isLoaded())
+ _script->pop();
}
void Game_v1::clearCollisions() {
diff --git a/engines/gob/game_v2.cpp b/engines/gob/game_v2.cpp
index ace842f18e..e170a1c9d0 100644
--- a/engines/gob/game_v2.cpp
+++ b/engines/gob/game_v2.cpp
@@ -293,7 +293,8 @@ void Game_v2::playTot(int16 skipPlay) {
_vm->_inter->_breakFromLevel = oldBreakFrom;
_vm->_scenery->_pCaptureCounter = oldCaptureCounter;
- _script->pop();
+ if (_script->isLoaded())
+ _script->pop();
}
void Game_v2::clearCollisions() {
diff --git a/engines/gob/script.cpp b/engines/gob/script.cpp
index 7ed27771f3..0ac9d26a9b 100644
--- a/engines/gob/script.cpp
+++ b/engines/gob/script.cpp
@@ -343,6 +343,9 @@ void Script::unloadTOT() {
if (_lomHandle >= 0)
_vm->_dataIO->closeData(_lomHandle);
+ while (!_callStack.empty())
+ pop();
+
delete[] _totData;
_totData = 0;