diff options
author | Eugene Sandulenko | 2017-03-01 09:31:12 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2017-03-01 10:50:35 +0100 |
commit | 3a7c0911224adc0d0d467dc530f62f97a8868bee (patch) | |
tree | 27105defbd90add88f974ab3b0d2ac4198888e64 /engines | |
parent | e7842795fe257dd465b2d5e36d71abed77edc244 (diff) | |
download | scummvm-rg350-3a7c0911224adc0d0d467dc530f62f97a8868bee.tar.gz scummvm-rg350-3a7c0911224adc0d0d467dc530f62f97a8868bee.tar.bz2 scummvm-rg350-3a7c0911224adc0d0d467dc530f62f97a8868bee.zip |
DIRECTOR: Plug memory leak
Diffstat (limited to 'engines')
-rw-r--r-- | engines/director/director.cpp | 12 | ||||
-rw-r--r-- | engines/director/director.h | 5 | ||||
-rw-r--r-- | engines/director/resource.cpp | 15 |
3 files changed, 18 insertions, 14 deletions
diff --git a/engines/director/director.cpp b/engines/director/director.cpp index a1ee253087..1f0c89780e 100644 --- a/engines/director/director.cpp +++ b/engines/director/director.cpp @@ -59,7 +59,7 @@ DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gam // Load Patterns loadPatterns(); - _sharedCasts = nullptr; + _sharedScore = nullptr; _currentScore = nullptr; _soundManager = nullptr; @@ -67,7 +67,7 @@ DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gam _currentPaletteLength = 0; _lingo = nullptr; - _sharedCasts = nullptr; + _sharedScore = nullptr; _sharedSound = nullptr; _sharedBMP = nullptr; _sharedSTXT = nullptr; @@ -100,6 +100,7 @@ DirectorEngine::~DirectorEngine() { delete _sharedBMP; delete _sharedSTXT; delete _sharedDIB; + delete _sharedScore; delete _currentScore; @@ -242,4 +243,11 @@ Common::HashMap<Common::String, Score *> *DirectorEngine::scanMovies(const Commo return nameMap; } +Common::HashMap<int, Cast *> *DirectorEngine::getSharedCasts() { + if (_sharedScore) + return &_sharedScore->_casts; + + return &_dummyCast; +} + } // End of namespace Director diff --git a/engines/director/director.h b/engines/director/director.h index 1c3d77fc71..5b1e9b36eb 100644 --- a/engines/director/director.h +++ b/engines/director/director.h @@ -105,7 +105,7 @@ public: Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *getSharedDIB() const { return _sharedDIB; } Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *getSharedBMP() const { return _sharedBMP; } Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *getSharedSTXT() const { return _sharedSTXT; } - Common::HashMap<int, Cast *> *getSharedCasts() const { return _sharedCasts; } + Common::HashMap<int, Cast *> *getSharedCasts(); Common::HashMap<Common::String, Score *> *_movies; @@ -138,7 +138,7 @@ private: void loadEXERIFX(Common::SeekableReadStream *stream, uint32 offset); void loadMac(const Common::String movie); - Common::HashMap<int, Cast *> *_sharedCasts; + Score *_sharedScore; Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *_sharedDIB; Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *_sharedSTXT; Common::HashMap<int, Common::SeekableSubReadStreamEndian *> *_sharedSound; @@ -157,6 +157,7 @@ private: Graphics::MacPatterns _director3QuickDrawPatterns; Common::String _sharedCastFile; + Common::HashMap<int, Cast *> _dummyCast; private: void testFontScaling(); diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp index 9ceb95ba74..3db6d66a13 100644 --- a/engines/director/resource.cpp +++ b/engines/director/resource.cpp @@ -205,8 +205,6 @@ void DirectorEngine::loadSharedCastsFrom(Common::String filename) { if (!shardcst->openFile(filename)) { warning("No shared cast %s", filename.c_str()); - _sharedCasts = new Common::HashMap<int, Cast *>; - return; } @@ -214,8 +212,7 @@ void DirectorEngine::loadSharedCastsFrom(Common::String filename) { _sharedSTXT = new Common::HashMap<int, Common::SeekableSubReadStreamEndian *>; _sharedSound = new Common::HashMap<int, Common::SeekableSubReadStreamEndian *>; _sharedBMP = new Common::HashMap<int, Common::SeekableSubReadStreamEndian *>; - - Score *castScore = new Score(this, shardcst); + _sharedScore = new Score(this, shardcst); if (shardcst->hasResource(MKTAG('F', 'O', 'N', 'D'), -1)) { debug("Shared cast has fonts. Loading...."); @@ -223,20 +220,18 @@ void DirectorEngine::loadSharedCastsFrom(Common::String filename) { _wm->_fontMan->loadFonts(filename); } - castScore->loadConfig(*shardcst->getResource(MKTAG('V','W','C','F'), 1024)); + _sharedScore->loadConfig(*shardcst->getResource(MKTAG('V','W','C','F'), 1024)); if (getVersion() < 4) - castScore->loadCastDataVWCR(*shardcst->getResource(MKTAG('V','W','C','R'), 1024)); + _sharedScore->loadCastDataVWCR(*shardcst->getResource(MKTAG('V','W','C','R'), 1024)); Common::Array<uint16> cast = shardcst->getResourceIDList(MKTAG('C','A','S','t')); if (cast.size() > 0) { for (Common::Array<uint16>::iterator iterator = cast.begin(); iterator != cast.end(); ++iterator) - castScore->loadCastData(*shardcst->getResource(MKTAG('C','A','S','t'), *iterator), *iterator, NULL); + _sharedScore->loadCastData(*shardcst->getResource(MKTAG('C','A','S','t'), *iterator), *iterator, NULL); } - castScore->setSpriteCasts(); - - _sharedCasts = &castScore->_casts; + _sharedScore->setSpriteCasts(); Common::Array<uint16> dib = shardcst->getResourceIDList(MKTAG('D','I','B',' ')); if (dib.size() != 0) { |