mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-20 19:21:46 +00:00
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:
parent
0c9bbbcf88
commit
f0a0537095
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user