mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Change ObjectAccessor::i_corpseLock to ACE_RW_Thread_Mutex.
Remove unecessary guard in ObjectAccessor::Update.
This commit is contained in:
@@ -184,7 +184,7 @@ void ObjectAccessor::SaveAllPlayers()
|
||||
|
||||
Corpse* ObjectAccessor::GetCorpseForPlayerGUID(uint64 guid)
|
||||
{
|
||||
ACE_GUARD_RETURN(LockType, guard, i_corpseGuard, NULL);
|
||||
TRINITY_READ_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
|
||||
|
||||
Player2CorpsesMapType::iterator iter = i_player2corpse.find(guid);
|
||||
if (iter == i_player2corpse.end())
|
||||
@@ -209,7 +209,7 @@ void ObjectAccessor::RemoveCorpse(Corpse* corpse)
|
||||
|
||||
// Critical section
|
||||
{
|
||||
ACE_GUARD(LockType, g, i_corpseGuard);
|
||||
TRINITY_WRITE_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
|
||||
|
||||
Player2CorpsesMapType::iterator iter = i_player2corpse.find(corpse->GetOwnerGUID());
|
||||
if (iter == i_player2corpse.end()) // TODO: Fix this
|
||||
@@ -231,7 +231,7 @@ void ObjectAccessor::AddCorpse(Corpse* corpse)
|
||||
|
||||
// Critical section
|
||||
{
|
||||
ACE_GUARD(LockType, g, i_corpseGuard);
|
||||
TRINITY_WRITE_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
|
||||
|
||||
ASSERT(i_player2corpse.find(corpse->GetOwnerGUID()) == i_player2corpse.end());
|
||||
i_player2corpse[corpse->GetOwnerGUID()] = corpse;
|
||||
@@ -246,7 +246,7 @@ void ObjectAccessor::AddCorpse(Corpse* corpse)
|
||||
|
||||
void ObjectAccessor::AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid, Map* map)
|
||||
{
|
||||
ACE_GUARD(LockType, g, i_corpseGuard);
|
||||
TRINITY_READ_GUARD(ACE_RW_Thread_Mutex, i_corpseLock);
|
||||
|
||||
for (Player2CorpsesMapType::iterator iter = i_player2corpse.begin(); iter != i_player2corpse.end(); ++iter)
|
||||
{
|
||||
@@ -346,17 +346,12 @@ void ObjectAccessor::Update(uint32 /*diff*/)
|
||||
{
|
||||
UpdateDataMapType update_players;
|
||||
|
||||
// Critical section
|
||||
while (!i_objects.empty())
|
||||
{
|
||||
ACE_GUARD(LockType, g, i_updateGuard);
|
||||
|
||||
while (!i_objects.empty())
|
||||
{
|
||||
Object* obj = *i_objects.begin();
|
||||
ASSERT(obj && obj->IsInWorld());
|
||||
i_objects.erase(i_objects.begin());
|
||||
obj->BuildUpdate(update_players);
|
||||
}
|
||||
Object* obj = *i_objects.begin();
|
||||
ASSERT(obj && obj->IsInWorld());
|
||||
i_objects.erase(i_objects.begin());
|
||||
obj->BuildUpdate(update_players);
|
||||
}
|
||||
|
||||
WorldPacket packet; // here we allocate a std::vector with a size of 0x10000
|
||||
|
||||
@@ -102,6 +102,7 @@ class ObjectAccessor
|
||||
{
|
||||
return HashMapHolder<T>::Find(guid);
|
||||
}
|
||||
|
||||
static Unit* GetObjectInOrOutOfWorld(uint64 guid, Unit* /*typeSpecifier*/)
|
||||
{
|
||||
if (IS_PLAYER_GUID(guid))
|
||||
@@ -235,42 +236,40 @@ class ObjectAccessor
|
||||
|
||||
void AddUpdateObject(Object* obj)
|
||||
{
|
||||
ACE_GUARD(LockType, Guard, i_updateGuard);
|
||||
TRINITY_GUARD(ACE_Thread_Mutex, i_objectLock);
|
||||
i_objects.insert(obj);
|
||||
}
|
||||
|
||||
void RemoveUpdateObject(Object* obj)
|
||||
{
|
||||
ACE_GUARD(LockType, Guard, i_updateGuard);
|
||||
TRINITY_GUARD(ACE_Thread_Mutex, i_objectLock);
|
||||
i_objects.erase(obj);
|
||||
}
|
||||
|
||||
void Update(uint32 diff);
|
||||
|
||||
//Thread safe
|
||||
Corpse* GetCorpseForPlayerGUID(uint64 guid);
|
||||
void RemoveCorpse(Corpse* corpse);
|
||||
void AddCorpse(Corpse* corpse);
|
||||
void AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid, Map* map);
|
||||
Corpse* ConvertCorpseForPlayer(uint64 player_guid, bool insignia = false);
|
||||
//Thread unsafe
|
||||
void RemoveOldCorpses();
|
||||
|
||||
typedef ACE_Thread_Mutex LockType;
|
||||
|
||||
protected:
|
||||
void UnloadAll();
|
||||
|
||||
private:
|
||||
|
||||
Player2CorpsesMapType i_player2corpse;
|
||||
|
||||
static void _buildChangeObjectForPlayer(WorldObject*, UpdateDataMapType&);
|
||||
static void _buildPacket(Player*, Object*, UpdateDataMapType&);
|
||||
void _update();
|
||||
|
||||
std::set<Object*> i_objects;
|
||||
Player2CorpsesMapType i_player2corpse;
|
||||
|
||||
LockType i_updateGuard;
|
||||
LockType i_corpseGuard;
|
||||
ACE_Thread_Mutex i_objectLock;
|
||||
ACE_RW_Thread_Mutex i_corpseLock;
|
||||
};
|
||||
|
||||
#define sObjectAccessor ACE_Singleton<ObjectAccessor, ACE_Thread_Mutex>::instance()
|
||||
|
||||
Reference in New Issue
Block a user