[Scummvm-cvs-logs] scummvm master -> f0a0537095e0b309f768de0b44cd20d05376c1d9

digitall dgturner at iee.org
Mon May 5 12:26:47 CEST 2014


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:
f0a0537095 NEVERHOOD: Fix memory leak from static data loading.


Commit: f0a0537095e0b309f768de0b44cd20d05376c1d9
    https://github.com/scummvm/scummvm/commit/f0a0537095e0b309f768de0b44cd20d05376c1d9
Author: D G Turner (digitall at scummvm.org)
Date: 2014-05-05T11:29:41+01:00

Commit Message:
NEVERHOOD: Fix memory leak from static data loading.

This is occurring due to duplicate entry ids, which should probably not
be present.

Changed paths:
    engines/neverhood/staticdata.cpp



diff --git a/engines/neverhood/staticdata.cpp b/engines/neverhood/staticdata.cpp
index 552ea92..03af44b 100644
--- a/engines/neverhood/staticdata.cpp
+++ b/engines/neverhood/staticdata.cpp
@@ -28,6 +28,18 @@ StaticData::StaticData() {
 }
 
 StaticData::~StaticData() {
+	for (Common::HashMap<uint32, HitRectList*>::iterator i = _hitRectLists.begin(); i != _hitRectLists.end(); ++i)
+		delete i->_value;
+	for (Common::HashMap<uint32, RectList*>::iterator i = _rectLists.begin(); i != _rectLists.end(); ++i)
+		delete i->_value;
+	for (Common::HashMap<uint32, MessageList*>::iterator i = _messageLists.begin(); i != _messageLists.end(); ++i)
+		delete i->_value;
+	for (Common::HashMap<uint32, NavigationList*>::iterator i = _navigationLists.begin(); i != _navigationLists.end(); ++i)
+		delete i->_value;
+	for (Common::HashMap<uint32, HallOfRecordsInfo*>::iterator i = _hallOfRecordsInfoItems.begin(); i != _hallOfRecordsInfoItems.end(); ++i)
+		delete i->_value;
+	for (Common::HashMap<uint32, TrackInfo*>::iterator i = _trackInfoItems.begin(); i != _trackInfoItems.end(); ++i)
+		delete i->_value;
 }
 
 void StaticData::load(const char *filename) {
@@ -69,6 +81,11 @@ void StaticData::load(const char *filename) {
 			messageList->push_back(messageItem);
 		}
 
+		if(_messageLists.contains(id)) {
+			warning("Duplicate id %d in _messageLists - freeing older entry", id);
+			delete _messageLists[id];
+		}
+
 		_messageLists[id] = messageList;
 	}
 
@@ -98,6 +115,12 @@ void StaticData::load(const char *filename) {
 			}
 			rectList->push_back(rectItem);
 		}
+
+		if(_rectLists.contains(id)) {
+			warning("Duplicate id %d in _rectLists - freeing older entry", id);
+			delete _rectLists[id];
+		}
+
 		_rectLists[id] = rectList;
 	}
 
@@ -117,6 +140,12 @@ void StaticData::load(const char *filename) {
 			hitRect.type = fd.readUint16LE();
 			hitRectList->push_back(hitRect);
 		}
+
+		if(_hitRectLists.contains(id)) {
+			warning("Duplicate id %d in _hitRectLists - freeing older entry", id);
+			delete _hitRectLists[id];
+		}
+
 		_hitRectLists[id] = hitRectList;
 	}
 
@@ -138,6 +167,12 @@ void StaticData::load(const char *filename) {
 			navigationItem.mouseCursorFileHash = fd.readUint32LE();
 			navigationList->push_back(navigationItem);
 		}
+
+		if(_navigationLists.contains(id)) {
+			warning("Duplicate id %d in _navigationLists - freeing older entry", id);
+			delete _navigationLists[id];
+		}
+
 		_navigationLists[id] = navigationList;
 	}
 
@@ -153,6 +188,12 @@ void StaticData::load(const char *filename) {
 		hallOfRecordsInfo->bgFilename3 = fd.readUint32LE();
 		hallOfRecordsInfo->xPosIndex = fd.readByte();
 		hallOfRecordsInfo->count = fd.readByte();
+
+		if(_hallOfRecordsInfoItems.contains(id)) {
+			warning("Duplicate id %d in _hallOfRecordsInfoItems - freeing older entry", id);
+			delete _hallOfRecordsInfoItems[id];
+		}
+
 		_hallOfRecordsInfoItems[id] = hallOfRecordsInfo;
 	}
 
@@ -172,6 +213,12 @@ void StaticData::load(const char *filename) {
 		trackInfo->mouseCursorFilename = fd.readUint32LE();
 		trackInfo->which1 = fd.readUint16LE();
 		trackInfo->which2 = fd.readUint16LE();
+
+		if(_trackInfoItems.contains(id)) {
+			warning("Duplicate id %d in _trackInfoItems - freeing older entry", id);
+			delete _trackInfoItems[id];
+		}
+
 		_trackInfoItems[id] = trackInfo;
 	}
 






More information about the Scummvm-git-logs mailing list