[Scummvm-cvs-logs] SF.net SVN: scummvm:[52575] scummvm/branches/gsoc2010-plugins/backends/ plugins/elf

dhewg at users.sourceforge.net dhewg at users.sourceforge.net
Sun Sep 5 23:59:50 CEST 2010


Revision: 52575
          http://scummvm.svn.sourceforge.net/scummvm/?rev=52575&view=rev
Author:   dhewg
Date:     2010-09-05 21:59:50 +0000 (Sun, 05 Sep 2010)

Log Message:
-----------
PLUGINS: Plug some memleaks.

Modified Paths:
--------------
    scummvm/branches/gsoc2010-plugins/backends/plugins/elf/elf-loader.cpp
    scummvm/branches/gsoc2010-plugins/backends/plugins/elf/elf-provider.cpp

Modified: scummvm/branches/gsoc2010-plugins/backends/plugins/elf/elf-loader.cpp
===================================================================
--- scummvm/branches/gsoc2010-plugins/backends/plugins/elf/elf-loader.cpp	2010-09-05 21:59:29 UTC (rev 52574)
+++ scummvm/branches/gsoc2010-plugins/backends/plugins/elf/elf-loader.cpp	2010-09-05 21:59:50 UTC (rev 52575)
@@ -51,16 +51,20 @@
 // Expel the symbol table from memory
 void DLObject::discard_symtab() {
 	free(_symtab);
+	_symtab = 0;
+
 	free(_strtab);
-	_symtab = 0;
 	_strtab = 0;
+
 	_symbol_cnt = 0;
 }
 
 // Unload all objects from memory
 void DLObject::unload() {
 	discard_symtab();
+
 	freeSegment(_segment);
+
 	_segment = 0;
 	_segmentSize = 0;
 	_segmentOffset = 0;
@@ -207,6 +211,7 @@
 			_file->read(shdr, ehdr->e_shnum * sizeof(*shdr)) !=
 			ehdr->e_shnum * sizeof(*shdr)) {
 		warning("elfloader: Section headers load failed.");
+		free(shdr);
 		return 0;
 	}
 
@@ -247,6 +252,8 @@
 			_file->read(_symtab, shdr[_symtab_sect].sh_size) !=
 			shdr[_symtab_sect].sh_size) {
 		warning("elfloader: Symbol table load failed.");
+		free(_symtab);
+		_symtab = 0;
 		return -1;
 	}
 
@@ -273,6 +280,8 @@
 			_file->read(_strtab, shdr[string_sect].sh_size) !=
 			shdr[string_sect].sh_size) {
 		warning("elfloader: Symbol table strings load failed.");
+		free(_strtab);
+		_strtab = 0;
 		return false;
 	}
 
@@ -314,8 +323,9 @@
 			return false;
 	}
 
-	if (!(shdr = loadSectionHeaders(&ehdr)))
-		ret = false;
+	shdr = loadSectionHeaders(&ehdr);
+	if (!shdr)
+		return false;
 
 	if (ret && ((_symtab_sect = loadSymbolTable(&ehdr, shdr)) < 0))
 		ret = false;

Modified: scummvm/branches/gsoc2010-plugins/backends/plugins/elf/elf-provider.cpp
===================================================================
--- scummvm/branches/gsoc2010-plugins/backends/plugins/elf/elf-provider.cpp	2010-09-05 21:59:29 UTC (rev 52574)
+++ scummvm/branches/gsoc2010-plugins/backends/plugins/elf/elf-provider.cpp	2010-09-05 21:59:50 UTC (rev 52575)
@@ -71,8 +71,7 @@
 
 	bool ret = DynamicPlugin::loadPlugin();
 
-	if (ret && _dlHandle)
-		_dlHandle->discard_symtab();
+	_dlHandle->discard_symtab();
 
 	return ret;
 }


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