diff options
author | David Turner | 2010-11-09 23:57:56 +0000 |
---|---|---|
committer | David Turner | 2010-11-09 23:57:56 +0000 |
commit | a74b8ad67f7c334051dce8bdb74a514169f905af (patch) | |
tree | 6912b40a2ccc8dd58e096171b6e44d72ff24014a | |
parent | 95a58b24712ee0f3801485be1534ade0b733017e (diff) | |
download | scummvm-rg350-a74b8ad67f7c334051dce8bdb74a514169f905af.tar.gz scummvm-rg350-a74b8ad67f7c334051dce8bdb74a514169f905af.tar.bz2 scummvm-rg350-a74b8ad67f7c334051dce8bdb74a514169f905af.zip |
TOON: More corrections to close memory leaks.
These corrections close a number of leaks in the Toon engine reported by running Valgrind with --leak-check=full option, but a significant number still remain.
svn-id: r54176
-rw-r--r-- | engines/toon/audio.cpp | 15 | ||||
-rw-r--r-- | engines/toon/audio.h | 2 | ||||
-rw-r--r-- | engines/toon/character.cpp | 36 | ||||
-rw-r--r-- | engines/toon/character.h | 2 | ||||
-rw-r--r-- | engines/toon/toon.cpp | 31 |
5 files changed, 55 insertions, 31 deletions
diff --git a/engines/toon/audio.cpp b/engines/toon/audio.cpp index 386d00ef77..592d1a7388 100644 --- a/engines/toon/audio.cpp +++ b/engines/toon/audio.cpp @@ -208,10 +208,8 @@ void AudioManager::stopCurrentVoice() { void AudioManager::closeAudioPack(int32 id) { - if(_audioPacks[id]) { - delete _audioPacks[id]; - _audioPacks[id] = 0; - } + delete _audioPacks[id]; + _audioPacks[id] = NULL; } bool AudioManager::loadAudioPack(int32 id, Common::String indexFile, Common::String packFile) { @@ -239,10 +237,6 @@ void AudioManager::stopMusic() { if (_channels[1]) _channels[1]->stop(true); } -AudioStreamInstance::~AudioStreamInstance() { - if (_man) - _man->removeInstance(this); -} AudioStreamInstance::AudioStreamInstance(AudioManager *man, Audio::Mixer *mixer, Common::SeekableReadStream *stream , bool looping) { _compBufferSize = 0; @@ -274,6 +268,11 @@ AudioStreamInstance::AudioStreamInstance(AudioManager *man, Audio::Mixer *mixer, } } +AudioStreamInstance::~AudioStreamInstance() { + if (_man) + _man->removeInstance(this); +} + int AudioStreamInstance::readBuffer(int16 *buffer, const int numSamples) { debugC(5, kDebugAudio, "readBuffer(buffer, %d)", numSamples); diff --git a/engines/toon/audio.h b/engines/toon/audio.h index e0676c2992..dec731e78d 100644 --- a/engines/toon/audio.h +++ b/engines/toon/audio.h @@ -124,7 +124,7 @@ public: void removeInstance(AudioStreamInstance *inst); // called by destructor AudioManager(ToonEngine *vm, Audio::Mixer *mixer); - ~AudioManager(void); + ~AudioManager(); bool voiceStillPlaying(); diff --git a/engines/toon/character.cpp b/engines/toon/character.cpp index 65c4135433..113054c1b8 100644 --- a/engines/toon/character.cpp +++ b/engines/toon/character.cpp @@ -33,17 +33,19 @@ namespace Toon { Character::Character(ToonEngine *vm) : _vm(vm) { _animationInstance = 0; _shadowAnimationInstance = NULL; - _shadowAnim = NULL; _x = 0; _y = 0; _z = 0; _finalX = 0; _finalY = 0; - _specialAnim = 0; _sceneAnimationId = -1; - _idleAnim = 0; - _walkAnim = 0; - _talkAnim = 0; + + _walkAnim = NULL; + _idleAnim = NULL; + _talkAnim = NULL; + _shadowAnim = NULL; + _specialAnim = NULL; + _facing = 0; _flags = 0; _animFlags = 0; @@ -65,11 +67,15 @@ Character::Character(ToonEngine *vm) : _vm(vm) { Character::~Character(void) { delete _shadowAnimationInstance; + + delete _walkAnim; + delete _idleAnim; + delete _talkAnim; delete _shadowAnim; + delete _specialAnim; } void Character::init() { - } void Character::setFacing(int32 facing) { @@ -204,27 +210,21 @@ int32 Character::getFacing() { bool Character::loadWalkAnimation(Common::String animName) { debugC(1, kDebugCharacter, "loadWalkAnimation(%s)", animName.c_str()); - if (_walkAnim) - delete _walkAnim; - + delete _walkAnim; _walkAnim = new Animation(_vm); return _walkAnim->loadAnimation(animName); } bool Character::loadIdleAnimation(Common::String animName) { debugC(1, kDebugCharacter, "loadIdleAnimation(%s)", animName.c_str()); - if (_idleAnim) - delete _idleAnim; - + delete _idleAnim; _idleAnim = new Animation(_vm); return _idleAnim->loadAnimation(animName); } bool Character::loadTalkAnimation(Common::String animName) { debugC(1, kDebugCharacter, "loadTalkAnimation(%s)", animName.c_str()); - if (_talkAnim) - delete _talkAnim; - + delete _talkAnim; _talkAnim = new Animation(_vm); return _talkAnim->loadAnimation(animName); } @@ -234,7 +234,6 @@ bool Character::setupPalette() { } void Character::playStandingAnim() { - } void Character::updateTimers(int32 relativeAdd) { @@ -247,7 +246,7 @@ void Character::stopSpecialAnim() { // Strangerke - Commented (not used) #if 0 if (_animSpecialId != _animSpecialDefaultId) - delete anim + delete anim; #endif if (_animScriptId != -1) _vm->getSceneAnimationScript(_animScriptId)->_frozenForConversation = false; @@ -983,8 +982,7 @@ void Character::playAnim(int32 animId, int32 unused, int32 flags) { _animFlags |= flags; - if (_specialAnim) - delete _specialAnim; + delete _specialAnim; _specialAnim = new Animation(_vm); _specialAnim->loadAnimation(animName); diff --git a/engines/toon/character.h b/engines/toon/character.h index 43636b8eb5..9e293875ab 100644 --- a/engines/toon/character.h +++ b/engines/toon/character.h @@ -53,7 +53,7 @@ struct SpecialCharacterAnimation { class Character { public: Character(ToonEngine *vm); - virtual ~Character(void); + virtual ~Character(); virtual void init(); virtual int32 getId(); virtual void setId(int32 id); diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp index 4221c5da8b..e44d7bc8f2 100644 --- a/engines/toon/toon.cpp +++ b/engines/toon/toon.cpp @@ -656,8 +656,6 @@ bool ToonEngine::showMainmenu(bool &loadedGame) { musicPlaying = false; } - - switch (clickingOn) { case MAINMENUHOTSPOT_START: // Start game (actually exit main menu) @@ -686,6 +684,11 @@ bool ToonEngine::showMainmenu(bool &loadedGame) { } } + //delete mainmenuMusic; + for (int entryNr = 0; entryNr < MAINMENU_ENTRYCOUNT; entryNr++) + delete entries[entryNr].animation; + delete mainmenuPicture; + return !exitGame; } @@ -756,6 +759,17 @@ ToonEngine::ToonEngine(OSystem *syst, const ADGameDescription *gameDescription) _moviePlayer = NULL; _mainSurface = NULL; + + _finalPalette = NULL; + _backupPalette = NULL; + _additionalPalette1 = NULL; + _additionalPalette2 = NULL; + _cutawayPalette = NULL; + _universalPalette = NULL; + _fluxPalette = NULL; + + _conversationData = NULL; + _fontRenderer = NULL; _fontToon = NULL; _fontEZ = NULL; @@ -764,6 +778,7 @@ ToonEngine::ToonEngine(OSystem *syst, const ADGameDescription *gameDescription) _roomTexts = NULL; _script_func = NULL; _script = NULL; + _pathFinding = NULL; _console = new ToonConsole(this); switch (_language) { @@ -795,6 +810,16 @@ ToonEngine::~ToonEngine() { delete _moviePlayer; delete _mainSurface; + delete[] _finalPalette; + delete[] _backupPalette; + delete[] _additionalPalette1; + delete[] _additionalPalette2; + delete[] _cutawayPalette; + delete[] _universalPalette; + delete[] _fluxPalette; + + delete[] _conversationData; + delete _fontRenderer; delete _fontToon; delete _fontEZ; @@ -804,6 +829,8 @@ ToonEngine::~ToonEngine() { delete _script_func; delete _script; + delete _pathFinding; + DebugMan.clearAllDebugChannels(); delete _console; } |