aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMachiavelli <none@none>2010-11-10 21:57:33 +0100
committerMachiavelli <none@none>2010-11-10 21:57:33 +0100
commit9153b83ab6fc01e0fab9ef73dcbe8e09ba84872c (patch)
treeaa2684f3e7b6e8435d4fd265f7f624c093e45fa9
parent22633051414b3f37ae0c5ec0ed9d65ef5d88042f (diff)
Core/ObjectMgr: Properly block when mutex is being held when saving creature/GO respawntime data instead of discarding the save operation.
--HG-- branch : trunk
-rwxr-xr-xsrc/server/game/Globals/ObjectMgr.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index f78d6dc15f1..9e158fbfa81 100755
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -7513,8 +7513,9 @@ void ObjectMgr::SaveCreatureRespawnTime(uint32 loguid, uint32 instance, time_t t
{
// This function can be Called from various map threads concurrently
{
- ACE_GUARD(ACE_Thread_Mutex, guard, m_CreatureRespawnTimesMtx);
+ m_CreatureRespawnTimesMtx.acquire();
mCreatureRespawnTimes[MAKE_PAIR64(loguid,instance)] = t;
+ m_CreatureRespawnTimesMtx.release();
}
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CRESPAWNTIME);
@@ -7546,8 +7547,9 @@ void ObjectMgr::SaveGORespawnTime(uint32 loguid, uint32 instance, time_t t)
{
// This function can be called from different map threads concurrently
{
- ACE_GUARD(ACE_Thread_Mutex, guard, m_GORespawnTimesMtx);
+ m_GORespawnTimesMtx.acquire();
mGORespawnTimes[MAKE_PAIR64(loguid,instance)] = t;
+ m_GORespawnTimesMtx.release();
}
WorldDatabase.PExecute("DELETE FROM gameobject_respawn WHERE guid = '%u' AND instance = '%u'", loguid, instance);
@@ -7561,7 +7563,7 @@ void ObjectMgr::DeleteRespawnTimeForInstance(uint32 instance)
RespawnTimes::iterator next;
{
- ACE_GUARD(ACE_Thread_Mutex, guard, m_GORespawnTimesMtx);
+ m_GORespawnTimesMtx.acquire();
for (RespawnTimes::iterator itr = mGORespawnTimes.begin(); itr != mGORespawnTimes.end(); itr = next)
{
next = itr;
@@ -7570,9 +7572,10 @@ void ObjectMgr::DeleteRespawnTimeForInstance(uint32 instance)
if (GUID_HIPART(itr->first) == instance)
mGORespawnTimes.erase(itr);
}
+ m_GORespawnTimesMtx.release();
}
{
- ACE_GUARD(ACE_Thread_Mutex, guard, m_CreatureRespawnTimesMtx);
+ m_CreatureRespawnTimesMtx.acquire();
for (RespawnTimes::iterator itr = mCreatureRespawnTimes.begin(); itr != mCreatureRespawnTimes.end(); itr = next)
{
next = itr;
@@ -7581,6 +7584,7 @@ void ObjectMgr::DeleteRespawnTimeForInstance(uint32 instance)
if (GUID_HIPART(itr->first) == instance)
mCreatureRespawnTimes.erase(itr);
}
+ m_CreatureRespawnTimesMtx.release();
}
WorldDatabase.PExecute("DELETE FROM creature_respawn WHERE instance = '%u'", instance);
WorldDatabase.PExecute("DELETE FROM gameobject_respawn WHERE instance = '%u'", instance);