From f347f4bc00b129b978963de863f0316a382d6102 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Thu, 6 Jan 2011 06:45:11 +0300 Subject: [PATCH] [10971] Make normal server shutdown safe for not finished mass mail tasks. --- src/game/MassMailMgr.cpp | 12 +++++++----- src/game/MassMailMgr.h | 2 +- src/mangosd/Master.cpp | 4 ++++ src/shared/revision_nr.h | 2 +- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/game/MassMailMgr.cpp b/src/game/MassMailMgr.cpp index 013d2a1bc..3e320b801 100644 --- a/src/game/MassMailMgr.cpp +++ b/src/game/MassMailMgr.cpp @@ -71,7 +71,7 @@ void MassMailMgr::AddMassMailTask(MailDraft* mailProto, MailSender sender, char CharacterDatabase.AsyncPQuery(&massMailerQueryHandler, &MassMailerQueryHandler::HandleQueryCallback, mailProto, sender, query); } -void MassMailMgr::Update() +void MassMailMgr::Update(bool sendall /*= false*/) { if (m_massMails.empty()) return; @@ -82,7 +82,7 @@ void MassMailMgr::Update() { MassMail& task = m_massMails.front(); - while (!task.m_recivers.empty() && maxcount > 0) + while (!task.m_recivers.empty() && (sendall || maxcount > 0)) { uint32 receiver_lowguid = *task.m_recivers.begin(); task.m_recivers.erase(task.m_recivers.begin()); @@ -96,7 +96,8 @@ void MassMailMgr::Update() // prevent mail return task.m_protoMail->SendMailTo(MailReceiver(receiver, receiver_guid), task.m_sender, MAIL_CHECK_MASK_RETURNED); - --maxcount; + if (!sendall) + --maxcount; break; } @@ -107,13 +108,14 @@ void MassMailMgr::Update() // prevent mail return draft.SendMailTo(MailReceiver(receiver, receiver_guid), task.m_sender, MAIL_CHECK_MASK_RETURNED); - --maxcount; + if (!sendall) + --maxcount; } if (task.m_recivers.empty()) m_massMails.pop_front(); } - while(!m_massMails.empty() && maxcount > 0); + while(!m_massMails.empty() && (sendall || maxcount > 0)); } void MassMailMgr::GetStatistic(uint32& tasks, uint32& mails, uint32& needTime) const diff --git a/src/game/MassMailMgr.h b/src/game/MassMailMgr.h index d83bccbbe..826cba58b 100644 --- a/src/game/MassMailMgr.h +++ b/src/game/MassMailMgr.h @@ -93,7 +93,7 @@ class MassMailMgr /** * Next step in mass mail activity, send some amount mails from queued tasks */ - void Update(); + void Update(bool sendall = false); private: diff --git a/src/mangosd/Master.cpp b/src/mangosd/Master.cpp index 3cab4fa72..5bbc16882 100644 --- a/src/mangosd/Master.cpp +++ b/src/mangosd/Master.cpp @@ -37,6 +37,7 @@ #include "Util.h" #include "revision_sql.h" #include "MaNGOSsoap.h" +#include "MassMailMgr.h" #include "DBCStores.h" #include @@ -346,6 +347,9 @@ int Master::Run() ///- Clean account database before leaving clearOnlineAccounts(); + // send all still queued mass mails (before DB connections shutdown) + sMassMailMgr.Update(true); + ///- Wait for DB delay threads to end CharacterDatabase.HaltDelayThread(); WorldDatabase.HaltDelayThread(); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 88f464e71..2104bc029 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10970" + #define REVISION_NR "10971" #endif // __REVISION_NR_H__