mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
- fixed some evil memory leaks
- fixed recursive dependency of castles
This commit is contained in:
parent
881a7cf862
commit
29f4a12814
@ -735,6 +735,12 @@ void dispose()
|
||||
{
|
||||
if (console)
|
||||
delete console;
|
||||
|
||||
// cleanup, mostly to remove false leaks from analyzer
|
||||
CResourceHandler::clear();
|
||||
CCS->musich->release();
|
||||
CCS->soundh->release();
|
||||
CMessage::dispose();
|
||||
}
|
||||
|
||||
//used only once during initialization
|
||||
|
@ -501,8 +501,8 @@ void MusicEntry::load(std::string musicURI)
|
||||
|
||||
logGlobal->traceStream()<<"Loading music file "<<musicURI;
|
||||
|
||||
auto data = CResourceHandler::get()->load(ResourceID(musicURI, EResType::MUSIC))->readAll();
|
||||
musicFile = SDL_RWFromConstMem(data.first.release(), data.second);
|
||||
data = CResourceHandler::get()->load(ResourceID(musicURI, EResType::MUSIC))->readAll();
|
||||
musicFile = SDL_RWFromConstMem(data.first.get(), data.second);
|
||||
music = Mix_LoadMUS_RW(musicFile);
|
||||
|
||||
if(!music)
|
||||
|
@ -85,6 +85,7 @@ class CMusicHandler;
|
||||
//Class for handling one music file
|
||||
class MusicEntry
|
||||
{
|
||||
std::pair<std::unique_ptr<ui8[]>, size_t> data;
|
||||
CMusicHandler *owner;
|
||||
Mix_Music *music;
|
||||
SDL_RWops *musicFile;
|
||||
|
@ -160,7 +160,7 @@
|
||||
"shipyard": { "id" : 6 },
|
||||
"fort": { "id" : 7 },
|
||||
"citadel": { "id" : 8, "upgrades" : "fort" },
|
||||
"castle": { "id" : 9, "upgrades" : "castle" },
|
||||
"castle": { "id" : 9, "upgrades" : "citadel" },
|
||||
"villageHall": { "id" : 10, "mode" : "auto" },
|
||||
"townHall": { "id" : 11, "upgrades" : "villageHall", "requires" : [ "tavern" ] },
|
||||
"cityHall": { "id" : 12, "upgrades" : "townHall", "requires" : [ "allOf", [ "mageGuild1" ], [ "marketplace" ], [ "blacksmith" ] ] },
|
||||
|
@ -154,7 +154,7 @@
|
||||
"tavern": { "id" : 5 },
|
||||
"fort": { "id" : 7 },
|
||||
"citadel": { "id" : 8, "upgrades" : "fort" },
|
||||
"castle": { "id" : 9, "upgrades" : "castle" },
|
||||
"castle": { "id" : 9, "upgrades" : "citadel" },
|
||||
"villageHall": { "id" : 10, "mode" : "auto" },
|
||||
"townHall": { "id" : 11, "upgrades" : "villageHall", "requires" : [ "tavern" ] },
|
||||
"cityHall": { "id" : 12, "upgrades" : "townHall", "requires" : [ "allOf", [ "mageGuild1" ], [ "marketplace" ], [ "blacksmith" ] ] },
|
||||
|
@ -153,7 +153,7 @@
|
||||
"shipyard": { "id" : 6 },
|
||||
"fort": { "id" : 7 },
|
||||
"citadel": { "id" : 8, "upgrades" : "fort" },
|
||||
"castle": { "id" : 9, "upgrades" : "castle" },
|
||||
"castle": { "id" : 9, "upgrades" : "citadel" },
|
||||
"villageHall": { "id" : 10, "mode" : "auto" },
|
||||
"townHall": { "id" : 11, "upgrades" : "villageHall", "requires" : [ "tavern" ] },
|
||||
"cityHall": { "id" : 12, "upgrades" : "townHall", "requires" : [ "allOf", [ "mageGuild1" ], [ "marketplace" ], [ "blacksmith" ] ] },
|
||||
|
@ -155,7 +155,7 @@
|
||||
"tavern": { "id" : 5 },
|
||||
"fort": { "id" : 7 },
|
||||
"citadel": { "id" : 8, "upgrades" : "fort" },
|
||||
"castle": { "id" : 9, "upgrades" : "castle" },
|
||||
"castle": { "id" : 9, "upgrades" : "citadel" },
|
||||
"villageHall": { "id" : 10, "mode" : "auto" },
|
||||
"townHall": { "id" : 11, "upgrades" : "villageHall", "requires" : [ "tavern" ] },
|
||||
"cityHall": { "id" : 12, "upgrades" : "townHall", "requires" : [ "allOf", [ "mageGuild1" ], [ "marketplace" ], [ "blacksmith" ] ] },
|
||||
|
@ -159,7 +159,7 @@
|
||||
"shipyard": { "id" : 6 },
|
||||
"fort": { "id" : 7 },
|
||||
"citadel": { "id" : 8, "upgrades" : "fort" },
|
||||
"castle": { "id" : 9, "upgrades" : "castle" },
|
||||
"castle": { "id" : 9, "upgrades" : "citadel" },
|
||||
"villageHall": { "id" : 10, "mode" : "auto" },
|
||||
"townHall": { "id" : 11, "upgrades" : "villageHall", "requires" : [ "tavern" ] },
|
||||
"cityHall": { "id" : 12, "upgrades" : "townHall", "requires" : [ "allOf", [ "mageGuild1" ], [ "marketplace" ], [ "blacksmith" ] ] },
|
||||
|
@ -159,7 +159,7 @@
|
||||
"tavern": { "id" : 5 },
|
||||
"fort": { "id" : 7 },
|
||||
"citadel": { "id" : 8, "upgrades" : "fort" },
|
||||
"castle": { "id" : 9, "upgrades" : "castle" },
|
||||
"castle": { "id" : 9, "upgrades" : "citadel" },
|
||||
"villageHall": { "id" : 10, "mode" : "auto" },
|
||||
"townHall": { "id" : 11, "upgrades" : "villageHall", "requires" : [ "tavern" ] },
|
||||
"cityHall": { "id" : 12, "upgrades" : "townHall", "requires" : [ "allOf", [ "mageGuild1" ], [ "marketplace" ], [ "blacksmith" ] ] },
|
||||
|
@ -150,7 +150,7 @@
|
||||
"tavern": { "id" : 5 },
|
||||
"fort": { "id" : 7 },
|
||||
"citadel": { "id" : 8, "upgrades" : "fort" },
|
||||
"castle": { "id" : 9, "upgrades" : "castle" },
|
||||
"castle": { "id" : 9, "upgrades" : "citadel" },
|
||||
"villageHall": { "id" : 10, "mode" : "auto" },
|
||||
"townHall": { "id" : 11, "upgrades" : "villageHall", "requires" : [ "tavern" ] },
|
||||
"cityHall": { "id" : 12, "upgrades" : "townHall", "requires" : [ "allOf", [ "mageGuild1" ], [ "marketplace" ], [ "blacksmith" ] ] },
|
||||
|
@ -154,7 +154,7 @@
|
||||
"tavern": { "id" : 5 },
|
||||
"fort": { "id" : 7 },
|
||||
"citadel": { "id" : 8, "upgrades" : "fort" },
|
||||
"castle": { "id" : 9, "upgrades" : "castle" },
|
||||
"castle": { "id" : 9, "upgrades" : "citadel" },
|
||||
"villageHall": { "id" : 10, "mode" : "auto" },
|
||||
"townHall": { "id" : 11, "upgrades" : "villageHall", "requires" : [ "tavern" ] },
|
||||
"cityHall": { "id" : 12, "upgrades" : "townHall", "requires" : [ "allOf", [ "mageGuild1" ], [ "marketplace" ], [ "blacksmith" ] ] },
|
||||
|
@ -311,18 +311,18 @@ void CTownHandler::loadBuilding(CTown &town, const std::string & stringID, const
|
||||
ret->upgrade = BuildingID(source["upgrades"].Float());
|
||||
else
|
||||
{
|
||||
// building id and upgrades can't be the same
|
||||
if(stringID == source["upgrades"].String())
|
||||
{
|
||||
throw std::runtime_error(boost::str(boost::format("Building with ID '%s' of town '%s' can't be an upgrade of the same building.") %
|
||||
stringID % town.faction->name));
|
||||
}
|
||||
|
||||
VLC->modh->identifiers.requestIdentifier("building." + town.faction->identifier, source["upgrades"], [=](si32 identifier)
|
||||
{
|
||||
ret->upgrade = BuildingID(identifier);
|
||||
});
|
||||
}
|
||||
|
||||
// building id and upgrades can't be the same
|
||||
if(ret->upgrade == ret->bid)
|
||||
{
|
||||
throw std::runtime_error(boost::str(boost::format("Building with ID '%s' of town '%s' can't be an upgrade of the same building.") %
|
||||
stringID % town.faction->name));
|
||||
}
|
||||
}
|
||||
else
|
||||
ret->upgrade = BuildingID::NONE;
|
||||
|
@ -102,7 +102,8 @@ CCompressedStream::CCompressedStream(std::unique_ptr<CInputStream> stream, bool
|
||||
|
||||
CCompressedStream::~CCompressedStream()
|
||||
{
|
||||
delete inflateState;
|
||||
inflateEnd(inflateState);
|
||||
//delete inflateState;
|
||||
}
|
||||
|
||||
si64 CCompressedStream::readMore(ui8 *data, si64 size)
|
||||
@ -163,7 +164,7 @@ si64 CCompressedStream::readMore(ui8 *data, si64 size)
|
||||
if (fileEnded)
|
||||
{
|
||||
inflateEnd(inflateState);
|
||||
vstd::clear_pointer(inflateState);
|
||||
//vstd::clear_pointer(inflateState);
|
||||
}
|
||||
return decompressed;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user