From 593f1e81b98cae9e5c50b7ae10246731b332c1ec Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Thu, 24 Jun 2010 07:11:51 +0400 Subject: [PATCH] [10103] More cleanups in InstanceSave * Use single function for erase element from save list. * Make lock bool checks class local (it need be replaced by normal lock object in future) * Remove redundent now friend class declarations. --- src/game/InstanceSaveMgr.cpp | 10 ++++++---- src/game/InstanceSaveMgr.h | 2 -- src/game/Player.cpp | 3 ++- src/shared/revision_nr.h | 2 +- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/game/InstanceSaveMgr.cpp b/src/game/InstanceSaveMgr.cpp index 4e18e6ac1..dc5bf2a02 100644 --- a/src/game/InstanceSaveMgr.cpp +++ b/src/game/InstanceSaveMgr.cpp @@ -115,8 +115,7 @@ bool InstanceSave::UnloadIfEmpty() { if(m_playerList.empty() && m_groupList.empty()) { - if(!sInstanceSaveMgr.lock_instLists) - sInstanceSaveMgr.RemoveInstanceSave(GetInstanceId()); + sInstanceSaveMgr.RemoveInstanceSave(GetInstanceId()); return false; } else @@ -419,14 +418,17 @@ void InstanceSaveManager::DeleteInstanceFromDB(uint32 instanceid) void InstanceSaveManager::RemoveInstanceSave(uint32 InstanceId) { + if (lock_instLists) + return; + InstanceSaveHashMap::iterator itr = m_instanceSaveById.find( InstanceId ); if(itr != m_instanceSaveById.end()) { // save the resettime for normal instances only when they get unloaded if(time_t resettime = itr->second->GetResetTimeForDB()) CharacterDatabase.PExecute("UPDATE instance SET resettime = '"UI64FMTD"' WHERE id = '%u'", (uint64)resettime, InstanceId); - delete itr->second; - m_instanceSaveById.erase(itr); + + _ResetSave(itr); } } diff --git a/src/game/InstanceSaveMgr.h b/src/game/InstanceSaveMgr.h index 9789d7ed2..8af5610df 100644 --- a/src/game/InstanceSaveMgr.h +++ b/src/game/InstanceSaveMgr.h @@ -43,7 +43,6 @@ class Group; */ class InstanceSave { - friend class InstanceSaveManager; public: /* Created either when: - any new instance is being generated @@ -166,7 +165,6 @@ class InstanceResetScheduler class MANGOS_DLL_DECL InstanceSaveManager : public MaNGOS::Singleton > { - friend class InstanceSave; friend class InstanceResetScheduler; public: InstanceSaveManager(); diff --git a/src/game/Player.cpp b/src/game/Player.cpp index fe43768f4..490536c19 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -16414,7 +16414,8 @@ InstancePlayerBind* Player::BindToInstance(InstanceSave *save, bool permanent, b if(bind.save != save) { - if(bind.save) bind.save->RemovePlayer(this); + if(bind.save) + bind.save->RemovePlayer(this); save->AddPlayer(this); } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 7a9c8ed18..5e004b61d 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10102" + #define REVISION_NR "10103" #endif // __REVISION_NR_H__