Преглед на файлове

- fixed some evil memory leaks
- fixed recursive dependency of castles

Ivan Savenko преди 12 години
родител
ревизия
29f4a12814

+ 6 - 0
client/CMT.cpp

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

+ 2 - 2
client/CMusicHandler.cpp

@@ -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)

+ 1 - 0
client/CMusicHandler.h

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

+ 1 - 1
config/factions/conflux.json

@@ -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" ] ] },

+ 1 - 1
config/factions/dungeon.json

@@ -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" ] ] },

+ 1 - 1
config/factions/fortress.json

@@ -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" ] ] },

+ 1 - 1
config/factions/inferno.json

@@ -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" ] ] },

+ 1 - 1
config/factions/necropolis.json

@@ -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" ] ] },

+ 1 - 1
config/factions/rampart.json

@@ -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" ] ] },

+ 1 - 1
config/factions/stronghold.json

@@ -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" ] ] },

+ 1 - 1
config/factions/tower.json

@@ -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" ] ] },

+ 7 - 7
lib/CTownHandler.cpp

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

+ 3 - 2
lib/filesystem/CCompressedStream.cpp

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