[Scummvm-git-logs] scummvm master -> b2f6777be18897c6355737f903e48e941c33ffe5
sev-
sev at scummvm.org
Thu Apr 2 14:05:49 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
b2f6777be1 DIRECTOR: Plug memory leaks
Commit: b2f6777be18897c6355737f903e48e941c33ffe5
https://github.com/scummvm/scummvm/commit/b2f6777be18897c6355737f903e48e941c33ffe5
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-04-02T16:05:23+02:00
Commit Message:
DIRECTOR: Plug memory leaks
Changed paths:
engines/director/archive.cpp
engines/director/director.cpp
engines/director/director.h
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
engines/director/resource.cpp
engines/director/score.cpp
diff --git a/engines/director/archive.cpp b/engines/director/archive.cpp
index 37e4e411ef..acdc451437 100644
--- a/engines/director/archive.cpp
+++ b/engines/director/archive.cpp
@@ -254,7 +254,7 @@ Common::SeekableSubReadStreamEndian *MacArchive::getResource(uint32 tag, uint16
return nullptr;
}
- return new Common::SeekableSubReadStreamEndian(stream, 0, stream->size(), true, DisposeAfterUse::NO);
+ return new Common::SeekableSubReadStreamEndian(stream, 0, stream->size(), true, DisposeAfterUse::YES);
}
// RIFF Archive code
diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index dfb998a0bc..8bac36097f 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -105,7 +105,10 @@ DirectorEngine::~DirectorEngine() {
delete _sharedScore;
delete _currentScore;
- cleanupMainArchive();
+ if (_macBinary) {
+ delete _macBinary;
+ _macBinary = nullptr;
+ }
delete _soundManager;
delete _lingo;
diff --git a/engines/director/director.h b/engines/director/director.h
index cfb399fc4d..5643755390 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -121,7 +121,6 @@ public:
void loadInitialMovie(const Common::String movie);
Archive *openMainArchive(const Common::String movie);
Archive *createArchive();
- void cleanupMainArchive();
// events.cpp
void processEvents();
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index b61584e34c..45681bbe73 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -292,6 +292,11 @@ void Lingo::initBuiltIns() {
}
}
+void Lingo::cleanupBuiltins() {
+ for (FuncHash::iterator it = _functions.begin(); it != _functions.end(); ++it)
+ delete it->_value;
+}
+
void Lingo::printSTUBWithArglist(const char *funcname, int nargs, const char *prefix) {
Common::String s(funcname);
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 55c7131469..a3f070094d 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -88,6 +88,7 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
}
Lingo::~Lingo() {
+ cleanupBuiltins();
}
ScriptContext *Lingo::getScriptContext(ScriptType type, uint16 id) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 2e81ebec39..5df94ac8c4 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -168,6 +168,7 @@ public:
Common::String decodeInstruction(ScriptData *sd, uint pc, uint *newPC = NULL);
void initBuiltIns();
+ void cleanupBuiltins();
void initFuncs();
void initBytecode();
diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp
index 985419e03d..1796e302f3 100644
--- a/engines/director/resource.cpp
+++ b/engines/director/resource.cpp
@@ -76,11 +76,6 @@ Archive *DirectorEngine::openMainArchive(const Common::String movie) {
return _mainArchive;
}
-void DirectorEngine::cleanupMainArchive() {
- delete _mainArchive;
- delete _macBinary;
-}
-
void DirectorEngine::loadEXE(const Common::String movie) {
Common::SeekableReadStream *exeStream = SearchMan.createReadStreamForMember(movie);
if (!exeStream)
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index f8e451ff0b..d2e39dfd5e 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -436,8 +436,15 @@ Score::~Score() {
for (uint i = 0; i < _frames.size(); i++)
delete _frames[i];
- if (_movieArchive)
+ if (_loadedStxts)
+ for (Common::HashMap<int, const Stxt *>::iterator it = _loadedStxts->begin(); it != _loadedStxts->end(); ++it)
+ delete it->_value;
+
+ if (_movieArchive) {
_movieArchive->close();
+ delete _movieArchive;
+ _movieArchive = nullptr;
+ }
delete _font;
delete _labels;
More information about the Scummvm-git-logs
mailing list