aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2013-09-05 21:51:02 +0200
committerjackpoz <giacomopoz@gmail.com>2013-09-05 22:10:46 +0200
commit9ce70fb3c945e7c10c63d78d18e479a1c11b6211 (patch)
tree4edaac177227497ff0b89a70d6d688835cdf02d5 /src/server/scripts
parentd5d0802262637d5b32555ec453b2034b6be247b8 (diff)
Core/Guild: Fix memory leak on Guild disband
Fix memory leak when disbanding a Guild, removed from GuildMgr but never deleted. Due to the different ways of how Guild::Disband() and Guild::DeleteMember() are called, each call to these methods has a different way to delete the Guild if empty/invalid. Valgrind log: 2,127 (240 direct, 1,887 indirect) bytes in 1 blocks are definitely lost in loss record 54 of 81 at operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) by guild_commandscript::HandleGuildCreateCommand(ChatHandler*, char const*) (cs_guild.cpp:91) by ChatHandler::ExecuteCommandInTable(ChatCommand*, char const*, std::string const&) (Chat.cpp:339) by ChatHandler::ExecuteCommandInTable(ChatCommand*, char const*, std::string const&) (Chat.cpp:320) by ChatHandler::ParseCommands(char const*) (Chat.cpp:466) by WorldSession::HandleMessagechatOpcode(WorldPacket&) (ChatHandler.cpp:217) by WorldSession::Update(unsigned int, PacketFilter&) (WorldSession.cpp:317) by World::UpdateSessions(unsigned int) (World.cpp:2632) by World::Update(unsigned int) (World.cpp:1989) by WorldRunnable::run() (WorldRunnable.cpp:60) by ACE_Based::Thread::ThreadTask(void*) (Threading.cpp:186) by ACE_OS_Thread_Adapter::invoke() (in /usr/lib/libACE-6.0.3.so)
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_guild.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp
index 0af0da10846..040c68dbacb 100644
--- a/src/server/scripts/Commands/cs_guild.cpp
+++ b/src/server/scripts/Commands/cs_guild.cpp
@@ -118,6 +118,7 @@ public:
return false;
targetGuild->Disband();
+ delete targetGuild;
return true;
}
@@ -164,7 +165,7 @@ public:
if (!targetGuild)
return false;
- targetGuild->DeleteMember(targetGuid, false, true);
+ targetGuild->DeleteMember(targetGuid, false, true, true);
return true;
}