From c06debb4683c784f35093af8fc08ca142a58f5de Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 9 Jul 2011 16:27:31 +0300 Subject: Fix for party memory leak and crash. --- src/client.cpp | 2 ++ src/net/manaserv/partyhandler.cpp | 4 ++++ src/net/manaserv/partyhandler.h | 6 +++++- src/net/partyhandler.h | 2 ++ src/net/tmwa/partyhandler.cpp | 5 +++++ src/net/tmwa/partyhandler.h | 2 ++ 6 files changed, 20 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/client.cpp b/src/client.cpp index fec408a2f..78688fa03 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -76,6 +76,7 @@ #include "net/net.h" #include "net/npchandler.h" #include "net/packetcounters.h" +#include "net/partyhandler.h" #include "net/worldinfo.h" #include "resources/beinginfo.h" @@ -850,6 +851,7 @@ int Client::exec() resman->cleanOrphans(); Party::clearParties(); Net::getNpcHandler()->clearDialogs(); + Net::getPartyHandler()->clear(); } mOldState = mState; diff --git a/src/net/manaserv/partyhandler.cpp b/src/net/manaserv/partyhandler.cpp index 9a5f19678..0e6af4578 100644 --- a/src/net/manaserv/partyhandler.cpp +++ b/src/net/manaserv/partyhandler.cpp @@ -195,4 +195,8 @@ void PartyHandler::requestPartyMembers() const //chatServerConnection->send(msg); } +void PartyHandler::clear() +{ +} + } // namespace ManaServ diff --git a/src/net/manaserv/partyhandler.h b/src/net/manaserv/partyhandler.h index 7403d0e36..89924c962 100644 --- a/src/net/manaserv/partyhandler.h +++ b/src/net/manaserv/partyhandler.h @@ -76,7 +76,11 @@ public: PartyShare getShareItems() const { return PARTY_SHARE_NO; } - void setShareItems(PartyShare share A_UNUSED) {} + void setShareItems(PartyShare share A_UNUSED) + { } + + void clear(); + private: Party *mParty; }; diff --git a/src/net/partyhandler.h b/src/net/partyhandler.h index e33bac383..246987eb1 100644 --- a/src/net/partyhandler.h +++ b/src/net/partyhandler.h @@ -73,6 +73,8 @@ class PartyHandler virtual void setShareItems(PartyShare share) = 0; + virtual void clear() = 0; + // virtual void options() = 0; // virtual void message() = 0; diff --git a/src/net/tmwa/partyhandler.cpp b/src/net/tmwa/partyhandler.cpp index f8e1e4de8..1526100f6 100644 --- a/src/net/tmwa/partyhandler.cpp +++ b/src/net/tmwa/partyhandler.cpp @@ -575,4 +575,9 @@ void PartyHandler::reload() taParty = Party::getParty(1); } +void PartyHandler::clear() +{ + taParty = 0; +} + } // namespace TmwAthena diff --git a/src/net/tmwa/partyhandler.h b/src/net/tmwa/partyhandler.h index 207bc5f26..d2b204a55 100644 --- a/src/net/tmwa/partyhandler.h +++ b/src/net/tmwa/partyhandler.h @@ -78,6 +78,8 @@ class PartyHandler : public MessageHandler, public Net::PartyHandler void reload(); + void clear(); + private: PartyShare mShareExp, mShareItems; }; -- cgit v1.2.3-60-g2f50