[Scummvm-cvs-logs] SF.net SVN: scummvm:[54152] scummvm/trunk/engines/mohawk

tdhs at users.sourceforge.net tdhs at users.sourceforge.net
Tue Nov 9 12:02:07 CET 2010


Revision: 54152
          http://scummvm.svn.sourceforge.net/scummvm/?rev=54152&view=rev
Author:   tdhs
Date:     2010-11-09 11:02:06 +0000 (Tue, 09 Nov 2010)

Log Message:
-----------
MOHAWK: Close a number of memory leaks in Myst.

These corrections close a number of leaks reported by running Valgrind with --leak-check=full option, but some still remain, mainly in the image loading and caching.

Modified Paths:
--------------
    scummvm/trunk/engines/mohawk/graphics.cpp
    scummvm/trunk/engines/mohawk/myst.cpp
    scummvm/trunk/engines/mohawk/myst.h

Modified: scummvm/trunk/engines/mohawk/graphics.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/graphics.cpp	2010-11-09 11:00:56 UTC (rev 54151)
+++ scummvm/trunk/engines/mohawk/graphics.cpp	2010-11-09 11:02:06 UTC (rev 54152)
@@ -92,6 +92,7 @@
 	delete _bmpDecoder;
 	delete _jpegDecoder;
 	delete _pictDecoder;
+	delete[] _pictureFile.entries;
 }
 
 static const char* picFileNames[] = {

Modified: scummvm/trunk/engines/mohawk/myst.cpp
===================================================================
--- scummvm/trunk/engines/mohawk/myst.cpp	2010-11-09 11:00:56 UTC (rev 54151)
+++ scummvm/trunk/engines/mohawk/myst.cpp	2010-11-09 11:02:06 UTC (rev 54152)
@@ -64,6 +64,14 @@
 	_needsUpdate = false;
 	_curResource = -1;
 
+	_gfx = NULL;
+	_console = NULL;
+	_scriptParser = NULL;
+	_varStore = NULL;
+	_saveLoad = NULL;
+	_loadDialog = NULL;
+	_optionsDialog = NULL;
+
 	_cursorHintCount = 0;
 	_cursorHints = NULL;
 
@@ -83,6 +91,8 @@
 }
 
 MohawkEngine_Myst::~MohawkEngine_Myst() {
+	DebugMan.clearAllDebugChannels();
+
 	delete _gfx;
 	delete _console;
 	delete _scriptParser;
@@ -90,10 +100,17 @@
 	delete _saveLoad;
 	delete _loadDialog;
 	delete _optionsDialog;
+
+	delete[] _cursorHints;
+
 	delete[] _view.conditionalImages;
 	delete[] _view.scriptResources;
-	delete[] _cursorHints;
-	_resources.clear();
+
+	while(!_resources.empty()) {
+		MystResource *temp = _resources.back();
+		_resources.pop_back();
+		delete temp;
+	}
 }
 
 // Uses cached data objects in preference to disk access
@@ -949,7 +966,11 @@
 }
 
 void MohawkEngine_Myst::loadResources() {
-	_resources.clear();
+	while(!_resources.empty()) {
+		MystResource *temp = _resources.back();
+		_resources.pop_back();
+		delete temp;
+	}
 
 	if (!_view.rlst) {
 		debugC(kDebugResource, "No RLST present");
@@ -1011,6 +1032,9 @@
 		            (_flags & kMystSubimageEnableFlag) != 0);
 }
 
+MystResource::~MystResource() {
+}
+
 void MystResource::handleMouseUp() {
 	if (_dest != 0)
 		_vm->changeToCard(_dest);
@@ -1021,6 +1045,7 @@
 MystResourceType5::MystResourceType5(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent) : MystResource(vm, rlstStream, parent) {
 	debugC(kDebugResource, "\tResource Type 5 Script:");
 
+	_scripts = NULL;
 	_scriptCount = rlstStream->readUint16LE();
 
 	debugC(kDebugResource, "\tOpcode Count: %d", _scriptCount);
@@ -1046,6 +1071,12 @@
 	}
 }
 
+MystResourceType5::~MystResourceType5() {
+	for (uint16 i = 0; i < _scriptCount; i++)
+		delete[] _scripts[i].values;
+	delete[] _scripts;
+}
+
 void MystResourceType5::handleMouseUp() {
 	_vm->_scriptParser->runScript(_scriptCount, _scripts, this);
 }
@@ -1133,6 +1164,14 @@
 		_subResources.push_back(loadResource(vm, rlstStream, this));
 }
 
+MystResourceType7::~MystResourceType7() {
+	while(!_subResources.empty()) {
+		MystResource *temp = _subResources.back();
+		_subResources.pop_back();
+		delete temp;
+	}
+}
+
 // TODO: All these functions to switch subresource are very similar.
 //       Find way to share code (function pointer pass?)
 void MystResourceType7::drawDataToScreen() {
@@ -1286,6 +1325,10 @@
 	}
 }
 
+MystResourceType8::~MystResourceType8() {
+	delete[] _subImages;
+}
+
 void MystResourceType8::drawDataToScreen() {
 	// Need to call overidden Type 7 function to ensure
 	// switch section is processed correctly.
@@ -1416,6 +1459,11 @@
 	warning("TODO: Card contains Type 10 Resource - Function not yet implemented");
 }
 
+MystResourceType10::~MystResourceType10() {
+	for (byte i = 0; i < 4; i++)
+		delete[] _lists[i].list;
+}
+
 void MystResourceType10::handleMouseUp() {
 	// TODO
 }
@@ -1472,6 +1520,11 @@
 	warning("TODO: Card contains Type 11 Resource - Function not yet implemented");
 }
 
+MystResourceType11::~MystResourceType11() {
+	for (byte i = 0; i < 3; i++)
+		delete[] _lists[i].list;
+}
+
 void MystResourceType11::handleMouseUp() {
 	// TODO
 
@@ -1557,6 +1610,11 @@
 	_doAnimation = false;
 }
 
+MystResourceType12::~MystResourceType12() {
+	for (byte i = 0; i < 3; i++)
+		delete[] _lists[i].list;
+}
+
 void MystResourceType12::handleAnimation() {
 	// TODO: Probably not final version. Variable/Type 11 Controlled?
 	if (_doAnimation) {

Modified: scummvm/trunk/engines/mohawk/myst.h
===================================================================
--- scummvm/trunk/engines/mohawk/myst.h	2010-11-09 11:00:56 UTC (rev 54151)
+++ scummvm/trunk/engines/mohawk/myst.h	2010-11-09 11:02:06 UTC (rev 54152)
@@ -157,7 +157,7 @@
 class MystResource {
 public:
 	MystResource(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
-	virtual ~MystResource() {}
+	virtual ~MystResource();
 
 	MystResource *_parent;
 
@@ -188,6 +188,7 @@
 class MystResourceType5 : public MystResource {
 public:
 	MystResourceType5(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
+	virtual ~MystResourceType5();
 	void handleMouseUp();
 
 protected:
@@ -218,7 +219,7 @@
 struct MystResourceType7 : public MystResource {
 public:
 	MystResourceType7(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
-	virtual ~MystResourceType7() {}
+	virtual ~MystResourceType7();
 
 	virtual void drawDataToScreen();
 	virtual void handleAnimation();
@@ -237,6 +238,7 @@
 class MystResourceType8 : public MystResourceType7 {
 public:
 	MystResourceType8(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
+	virtual ~MystResourceType8();
 	void drawDataToScreen();
 	uint16 getType8Var();
 
@@ -254,6 +256,7 @@
 class MystResourceType10 : public MystResourceType8 {
 public:
 	MystResourceType10(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
+	virtual ~MystResourceType10();
 	void handleMouseUp();
 
 protected:
@@ -273,6 +276,7 @@
 class MystResourceType11 : public MystResourceType8 {
 public:
 	MystResourceType11(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
+	virtual ~MystResourceType11();
 	void handleMouseUp();
 
 protected:
@@ -292,6 +296,7 @@
 class MystResourceType12 : public MystResourceType8 {
 public:
 	MystResourceType12(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystResource *parent);
+	virtual ~MystResourceType12();
 	void handleAnimation();
 	void handleMouseUp();
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list