NEVERHOOD: Fix memory leak from static data loading.

This is occurring due to duplicate entry ids, which should probably not
be present.
This commit is contained in:
D G Turner 2014-05-05 11:29:41 +01:00
parent 0c9bbbcf88
commit f0a0537095

View File

@ -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;
}