From 0c1de29d656bf5be5c8cc64119e502d4b839cbf6 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Wed, 2 Dec 2009 18:15:25 +0300 Subject: [PATCH] [8903] Stop anti-freeze thread eraly to prevent it triggering at shutdown operations. --- src/mangosd/Master.cpp | 20 ++++++++++++++------ src/shared/revision_nr.h | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/mangosd/Master.cpp b/src/mangosd/Master.cpp index 1117a1739..829725f32 100644 --- a/src/mangosd/Master.cpp +++ b/src/mangosd/Master.cpp @@ -292,12 +292,13 @@ int Master::Run() realCurrTime = realPrevTime = getMSTime(); ///- Start up freeze catcher thread + ACE_Based::Thread* freeze_thread = NULL; if(uint32 freeze_delay = sConfig.GetIntDefault("MaxCoreStuckTime", 0)) { FreezeDetectorRunnable *fdr = new FreezeDetectorRunnable(); fdr->SetDelayTime(freeze_delay*1000); - ACE_Based::Thread freeze_thread(fdr); - freeze_thread.setPriority(ACE_Based::Highest); + freeze_thread = new ACE_Based::Thread(fdr); + freeze_thread->setPriority(ACE_Based::Highest); } ///- Launch the world listener socket @@ -313,7 +314,14 @@ int Master::Run() sWorldSocketMgr->Wait (); - // set server offline + ///- Stop freeze protection before shutdown tasks + if (freeze_thread) + { + freeze_thread->destroy(); + delete freeze_thread; + } + + ///- Set server offline in realmlist loginDatabase.PExecute("UPDATE realmlist SET color = 2 WHERE id = '%d'",realmID); ///- Remove signal handling before leaving @@ -324,10 +332,10 @@ int Master::Run() world_thread.wait(); rar_thread.wait (); - ///- Clean database before leaving + ///- Clean account database before leaving clearOnlineAccounts(); - ///- Wait for delay threads to end + ///- Wait for DB delay threads to end CharacterDatabase.HaltDelayThread(); WorldDatabase.HaltDelayThread(); loginDatabase.HaltDelayThread(); @@ -388,7 +396,7 @@ int Master::Run() // fixes a memory leak related to detaching threads from the module UnloadScriptingModule(); - // Exit the process with specified return value + ///- Exit the process with specified return value return World::GetExitCode(); } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index aee05d28d..902de983f 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 "8902" + #define REVISION_NR "8903" #endif // __REVISION_NR_H__