diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/server/game/Globals/ObjectAccessor.h | 34 | ||||
| -rwxr-xr-x | src/server/game/Maps/Map.cpp | 1 | 
2 files changed, 14 insertions, 21 deletions
diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index 12e50c455ab..25fa20dce70 100755 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -84,8 +84,7 @@ class HashMapHolder  class ObjectAccessor  { -    friend class ACE_Singleton<ObjectAccessor, ACE_Thread_Mutex>; -    friend class WorldRunnable; +    friend class ACE_Singleton<ObjectAccessor, ACE_Null_Mutex>;      private:          ObjectAccessor();          ~ObjectAccessor(); @@ -93,9 +92,6 @@ class ObjectAccessor          ObjectAccessor& operator=(const ObjectAccessor&);      public: -        typedef UNORDERED_MAP<uint64, Corpse*> Player2CorpsesMapType; -        typedef UNORDERED_MAP<Player*, UpdateData>::value_type UpdateDataValueType; -          // TODO: override these template functions for each holder type and add assertions          template<class T> static T* GetObjectInOrOutOfWorld(uint64 guid, T* /*typeSpecifier*/) @@ -196,10 +192,10 @@ class ObjectAccessor          static Pet* FindPet(uint64);          static Player* FindPlayer(uint64);          static Unit* FindUnit(uint64); -        Player* FindPlayerByName(const char* name); +        static Player* FindPlayerByName(const char* name);          // when using this, you must use the hashmapholder's lock -        HashMapHolder<Player>::MapType const& GetPlayers() const +        static HashMapHolder<Player>::MapType const& GetPlayers()          {              return HashMapHolder<Player>::GetContainer();          } @@ -216,24 +212,19 @@ class ObjectAccessor          //    return HashMapHolder<GameObject>::GetContainer();          //} -        template<class T> void AddObject(T* object) +        template<class T> static void AddObject(T* object)          {              HashMapHolder<T>::Insert(object);          } -        template<class T> void RemoveObject(T* object) +        template<class T> static void RemoveObject(T* object)          {              HashMapHolder<T>::Remove(object);          } -        void RemoveObject(Player* pl) -        { -            HashMapHolder<Player>::Remove(pl); -            RemoveUpdateObject((Object*)pl); -        } - -        void SaveAllPlayers(); +        static void SaveAllPlayers(); +        //non-static functions          void AddUpdateObject(Object* obj)          {              TRINITY_GUARD(ACE_Thread_Mutex, i_objectLock); @@ -246,18 +237,16 @@ class ObjectAccessor              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 Update(uint32 diff);          void RemoveOldCorpses(); - -    protected:          void UnloadAll();      private: @@ -265,6 +254,9 @@ class ObjectAccessor          static void _buildPacket(Player*, Object*, UpdateDataMapType&);          void _update(); +        typedef UNORDERED_MAP<uint64, Corpse*> Player2CorpsesMapType; +        typedef UNORDERED_MAP<Player*, UpdateData>::value_type UpdateDataValueType; +          std::set<Object*> i_objects;          Player2CorpsesMapType i_player2corpse; @@ -272,5 +264,5 @@ class ObjectAccessor          ACE_RW_Thread_Mutex i_corpseLock;  }; -#define sObjectAccessor ACE_Singleton<ObjectAccessor, ACE_Thread_Mutex>::instance() +#define sObjectAccessor ACE_Singleton<ObjectAccessor, ACE_Null_Mutex>::instance()  #endif diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index ebeac025f1d..c6fafe5446e 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -312,6 +312,7 @@ template<>  void Map::DeleteFromWorld(Player* pl)  {      sObjectAccessor->RemoveObject(pl); +    sObjectAccessor->RemoveUpdateObject(pl); //TODO: I do not know why we need this, it should be removed in ~Object anyway      delete pl;  }  | 
