aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormegamage <none@none.none>2011-10-21 17:29:09 -0400
committermegamage <none@none.none>2011-10-21 17:29:09 -0400
commitc9c5c2a355a718486b173255a9312da896ed279d (patch)
tree7cb650dc2446032376cc11539b9958bd3e881921 /src
parent5fdde0da737051821e7238d76b8293224f6b7cac (diff)
Use read/write thread mx guard instead of general guard for HashMapHolder.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Chat/Commands/Level3.cpp2
-rwxr-xr-xsrc/server/game/Globals/ObjectAccessor.cpp14
-rwxr-xr-xsrc/server/game/Globals/ObjectAccessor.h30
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/MiscHandler.cpp4
-rw-r--r--src/server/scripts/Commands/cs_gm.cpp4
5 files changed, 27 insertions, 27 deletions
diff --git a/src/server/game/Chat/Commands/Level3.cpp b/src/server/game/Chat/Commands/Level3.cpp
index 8dd5e17f550..d87717d96fe 100755
--- a/src/server/game/Chat/Commands/Level3.cpp
+++ b/src/server/game/Chat/Commands/Level3.cpp
@@ -2671,7 +2671,7 @@ bool ChatHandler::HandleResetAllCommand(const char * args)
CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '%u' WHERE (at_login & '%u') = '0'", atLogin, atLogin);
- ACE_GUARD_RETURN(ACE_Thread_Mutex, guard, *HashMapHolder<Player>::GetLock(), true);
+ ACE_READ_GUARD_RETURN(HashMapHolder<Player>::LockType, guard, *HashMapHolder<Player>::GetLock(), true);
HashMapHolder<Player>::MapType const& plist = sObjectAccessor->GetPlayers();
for (HashMapHolder<Player>::MapType::const_iterator itr = plist.begin(); itr != plist.end(); ++itr)
itr->second->SetAtLoginFlag(atLogin);
diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp
index 306d19d2001..84d27efc8d9 100755
--- a/src/server/game/Globals/ObjectAccessor.cpp
+++ b/src/server/game/Globals/ObjectAccessor.cpp
@@ -165,9 +165,9 @@ Unit* ObjectAccessor::FindUnit(uint64 guid)
Player* ObjectAccessor::FindPlayerByName(const char* name)
{
- ACE_GUARD_RETURN(LockType, g, *HashMapHolder<Player>::GetLock(), NULL);
- HashMapHolder<Player>::MapType& m = HashMapHolder<Player>::GetContainer();
- for (HashMapHolder<Player>::MapType::iterator iter = m.begin(); iter != m.end(); ++iter)
+ ACE_READ_GUARD_RETURN(HashMapHolder<Player>::LockType, g, *HashMapHolder<Player>::GetLock(), NULL);
+ HashMapHolder<Player>::MapType const& m = GetPlayers();
+ for (HashMapHolder<Player>::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter)
if (iter->second->IsInWorld() && strcmp(name, iter->second->GetName()) == 0)
return iter->second;
@@ -176,9 +176,9 @@ Player* ObjectAccessor::FindPlayerByName(const char* name)
void ObjectAccessor::SaveAllPlayers()
{
- ACE_GUARD(LockType, g, *HashMapHolder<Player>::GetLock());
- HashMapHolder<Player>::MapType& m = HashMapHolder<Player>::GetContainer();
- for (HashMapHolder<Player>::MapType::iterator itr = m.begin(); itr != m.end(); ++itr)
+ ACE_READ_GUARD(HashMapHolder<Player>::LockType, g, *HashMapHolder<Player>::GetLock());
+ HashMapHolder<Player>::MapType const& m = GetPlayers();
+ for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
itr->second->SaveToDB();
}
@@ -380,7 +380,7 @@ void ObjectAccessor::UnloadAll()
/// Define the static members of HashMapHolder
template <class T> UNORDERED_MAP< uint64, T* > HashMapHolder<T>::m_objectMap;
-template <class T> ACE_Thread_Mutex HashMapHolder<T>::i_lock;
+template <class T> typename HashMapHolder<T>::LockType HashMapHolder<T>::i_lock;
/// Global definitions for the hashmap storage
diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h
index 4ffe27b19d8..ae88ae3673f 100755
--- a/src/server/game/Globals/ObjectAccessor.h
+++ b/src/server/game/Globals/ObjectAccessor.h
@@ -48,23 +48,23 @@ class HashMapHolder
public:
typedef UNORDERED_MAP<uint64, T*> MapType;
- typedef ACE_Thread_Mutex LockType;
+ typedef ACE_RW_Thread_Mutex LockType;
static void Insert(T* o)
{
- ACE_GUARD(LockType, Guard, i_lock);
+ ACE_WRITE_GUARD(LockType, Guard, i_lock);
m_objectMap[o->GetGUID()] = o;
}
static void Remove(T* o)
{
- ACE_GUARD(LockType, Guard, i_lock);
+ ACE_WRITE_GUARD(LockType, Guard, i_lock);
m_objectMap.erase(o->GetGUID());
}
static T* Find(uint64 guid)
{
- ACE_GUARD_RETURN(LockType, Guard, i_lock, NULL);
+ ACE_READ_GUARD_RETURN(LockType, Guard, i_lock, NULL);
typename MapType::iterator itr = m_objectMap.find(guid);
return (itr != m_objectMap.end()) ? itr->second : NULL;
}
@@ -198,22 +198,22 @@ class ObjectAccessor
Player* FindPlayerByName(const char* name);
// when using this, you must use the hashmapholder's lock
- HashMapHolder<Player>::MapType& GetPlayers()
+ HashMapHolder<Player>::MapType const& GetPlayers() const
{
return HashMapHolder<Player>::GetContainer();
}
// when using this, you must use the hashmapholder's lock
- HashMapHolder<Creature>::MapType& GetCreatures()
- {
- return HashMapHolder<Creature>::GetContainer();
- }
-
- // when using this, you must use the hashmapholder's lock
- HashMapHolder<GameObject>::MapType& GetGameObjects()
- {
- return HashMapHolder<GameObject>::GetContainer();
- }
+ //HashMapHolder<Creature>::MapType& GetCreatures()
+ //{
+ // return HashMapHolder<Creature>::GetContainer();
+ //}
+
+ //// when using this, you must use the hashmapholder's lock
+ //HashMapHolder<GameObject>::MapType& GetGameObjects()
+ //{
+ // return HashMapHolder<GameObject>::GetContainer();
+ //}
template<class T> void AddObject(T* object)
{
diff --git a/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp b/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
index 1b0cef69c04..971e0b89c0f 100755
--- a/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MiscHandler.cpp
@@ -239,8 +239,8 @@ void WorldSession::HandleWhoOpcode(WorldPacket & recv_data)
data << uint32(matchcount); // placeholder, count of players matching criteria
data << uint32(displaycount); // placeholder, count of players displayed
- ACE_GUARD(ACE_Thread_Mutex, g, *HashMapHolder<Player>::GetLock());
- HashMapHolder<Player>::MapType& m = sObjectAccessor->GetPlayers();
+ ACE_READ_GUARD(HashMapHolder<Player>::LockType, g, *HashMapHolder<Player>::GetLock());
+ HashMapHolder<Player>::MapType const& m = sObjectAccessor->GetPlayers();
for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
{
if (AccountMgr::IsPlayerAccount(security))
diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp
index 2a352e92d01..68ccf96bb87 100644
--- a/src/server/scripts/Commands/cs_gm.cpp
+++ b/src/server/scripts/Commands/cs_gm.cpp
@@ -117,8 +117,8 @@ public:
bool first = true;
bool footer = false;
- ACE_GUARD_RETURN(ACE_Thread_Mutex, guard, *HashMapHolder<Player>::GetLock(), true);
- HashMapHolder<Player>::MapType& m = sObjectAccessor->GetPlayers();
+ ACE_READ_GUARD_RETURN(HashMapHolder<Player>::LockType, guard, *HashMapHolder<Player>::GetLock(), true);
+ HashMapHolder<Player>::MapType const& m = sObjectAccessor->GetPlayers();
for (HashMapHolder<Player>::MapType::const_iterator itr = m.begin(); itr != m.end(); ++itr)
{
AccountTypes itrSec = itr->second->GetSession()->GetSecurity();