From d9cb0702158fd045285f2c0a904cb31a45a3864a Mon Sep 17 00:00:00 2001 From: Anubisss Date: Sat, 23 Jan 2010 14:45:58 +0100 Subject: Implement QueryResult_AutoPtr type which is ACE's reference counted auto_ptr(ACE_Refcounted_Auto_Ptr) for QueryResult pointers. Use this auto_ptr for every DB queries(except QueryNamedResult yet). This patch guarantees NO memory leaks from QueryResult pointers. Thanks to raczman for the idea and for the helping to make this patch. --HG-- branch : trunk --- src/game/ArenaTeam.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'src/game/ArenaTeam.cpp') diff --git a/src/game/ArenaTeam.cpp b/src/game/ArenaTeam.cpp index 1d9669007fc..320d8aa6b98 100644 --- a/src/game/ArenaTeam.cpp +++ b/src/game/ArenaTeam.cpp @@ -116,13 +116,12 @@ bool ArenaTeam::AddMember(const uint64& PlayerGuid) else { // 0 1 - QueryResult *result = CharacterDatabase.PQuery("SELECT name, class FROM characters WHERE guid='%u'", GUID_LOPART(PlayerGuid)); + QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT name, class FROM characters WHERE guid='%u'", GUID_LOPART(PlayerGuid)); if(!result) return false; plName = (*result)[0].GetCppString(); plClass = (*result)[1].GetUInt8(); - delete result; // check if player already in arenateam of that size if(Player::GetArenaTeamIdFromDB(PlayerGuid, GetType()) != 0) @@ -175,7 +174,7 @@ bool ArenaTeam::AddMember(const uint64& PlayerGuid) bool ArenaTeam::LoadArenaTeamFromDB(uint32 ArenaTeamId) { - QueryResult *result = CharacterDatabase.PQuery("SELECT arenateamid,name,captainguid,type,BackgroundColor,EmblemStyle,EmblemColor,BorderStyle,BorderColor FROM arena_team WHERE arenateamid = '%u'", ArenaTeamId); + QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT arenateamid,name,captainguid,type,BackgroundColor,EmblemStyle,EmblemColor,BorderStyle,BorderColor FROM arena_team WHERE arenateamid = '%u'", ArenaTeamId); if(!result) return false; @@ -192,8 +191,6 @@ bool ArenaTeam::LoadArenaTeamFromDB(uint32 ArenaTeamId) m_BorderStyle = fields[7].GetUInt32(); m_BorderColor = fields[8].GetUInt32(); - delete result; - // only load here, so additional checks can be made LoadStatsFromDB(ArenaTeamId); LoadMembersFromDB(ArenaTeamId); @@ -215,7 +212,7 @@ bool ArenaTeam::LoadArenaTeamFromDB(uint32 ArenaTeamId) void ArenaTeam::LoadStatsFromDB(uint32 ArenaTeamId) { // 0 1 2 3 4 5 - QueryResult *result = CharacterDatabase.PQuery("SELECT rating,games,wins,played,wins2,rank FROM arena_team_stats WHERE arenateamid = '%u'", ArenaTeamId); + QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT rating,games,wins,played,wins2,rank FROM arena_team_stats WHERE arenateamid = '%u'", ArenaTeamId); if(!result) return; @@ -228,14 +225,12 @@ void ArenaTeam::LoadStatsFromDB(uint32 ArenaTeamId) m_stats.games_season = fields[3].GetUInt32(); m_stats.wins_season = fields[4].GetUInt32(); m_stats.rank = fields[5].GetUInt32(); - - delete result; } void ArenaTeam::LoadMembersFromDB(uint32 ArenaTeamId) { // 0 1 2 3 4 5 6 7 - QueryResult *result = CharacterDatabase.PQuery("SELECT member.guid,played_week,wons_week,played_season,wons_season,personal_rating,name,class " + QueryResult_AutoPtr result = CharacterDatabase.PQuery("SELECT member.guid,played_week,wons_week,played_season,wons_season,personal_rating,name,class " "FROM arena_team_member member " "INNER JOIN characters chars on member.guid = chars.guid " "WHERE member.arenateamid = '%u'", ArenaTeamId); @@ -256,7 +251,6 @@ void ArenaTeam::LoadMembersFromDB(uint32 ArenaTeamId) newmember.Class = fields[7].GetUInt8(); m_members.push_back(newmember); }while( result->NextRow() ); - delete result; } void ArenaTeam::SetCaptain(const uint64& guid) -- cgit v1.2.3