From 398d71285d35f947c6416fd6b0124694729276e9 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Fri, 24 Dec 2010 19:46:11 +0100 Subject: [PATCH] Core: Fix a possible crash in WorldSession::ProcessQueryCallbacks Author: Cyberbrest Closes issue #5262 --HG-- branch : trunk --- src/server/game/Globals/ObjectMgr.h | 2 +- src/server/game/Server/Protocol/Handlers/QueryHandler.cpp | 2 +- src/server/game/Server/WorldSession.cpp | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 19eb575ac9..78a912e00b 100755 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -867,7 +867,7 @@ class ObjectMgr void LoadCreatures(); void LoadLinkedRespawn(); bool SetCreatureLinkedRespawn(uint32 guid, uint32 linkedGuid); - void LoadCreatureRespawnTimes(); + void LoadLinkedRespawnTimes(); void LoadCreatureAddons(); void LoadCreatureModelInfo(); void LoadEquipmentTemplates(); diff --git a/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp b/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp index 4ac24c843d..e79098fb8a 100755 --- a/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/QueryHandler.cpp @@ -58,7 +58,7 @@ void WorldSession::SendNameQueryOpcode(Player *p) void WorldSession::SendNameQueryOpcodeFromDB(uint64 guid) { - ACE_Future lFutureResult = + QueryResultFuture lFutureResult = CharacterDatabase.AsyncPQuery( !sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED) ? // ------- Query Without Declined Names -------- diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index f76f67b7c0..7b4db102fd 100755 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -1003,8 +1003,12 @@ void WorldSession::ProcessQueryCallbacks() if (m_nameQueryCallbacks.next_readable(lResult, &timeout) != 1) break; - lResult.get(result); - SendNameQueryOpcodeFromDBCallBack(result); + if (lResult.ready()) + { + lResult.get(result); + SendNameQueryOpcodeFromDBCallBack(result); + lResult.cancel(); + } } //! HandleCharEnumOpcode