[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