[8903] Stop anti-freeze thread eraly to prevent it triggering at shutdown operations.

This commit is contained in:
VladimirMangos 2009-12-02 18:15:25 +03:00
parent d5d3f6d26a
commit 0c1de29d65
2 changed files with 15 additions and 7 deletions

View file

@ -292,12 +292,13 @@ int Master::Run()
realCurrTime = realPrevTime = getMSTime(); realCurrTime = realPrevTime = getMSTime();
///- Start up freeze catcher thread ///- Start up freeze catcher thread
ACE_Based::Thread* freeze_thread = NULL;
if(uint32 freeze_delay = sConfig.GetIntDefault("MaxCoreStuckTime", 0)) if(uint32 freeze_delay = sConfig.GetIntDefault("MaxCoreStuckTime", 0))
{ {
FreezeDetectorRunnable *fdr = new FreezeDetectorRunnable(); FreezeDetectorRunnable *fdr = new FreezeDetectorRunnable();
fdr->SetDelayTime(freeze_delay*1000); fdr->SetDelayTime(freeze_delay*1000);
ACE_Based::Thread freeze_thread(fdr); freeze_thread = new ACE_Based::Thread(fdr);
freeze_thread.setPriority(ACE_Based::Highest); freeze_thread->setPriority(ACE_Based::Highest);
} }
///- Launch the world listener socket ///- Launch the world listener socket
@ -313,7 +314,14 @@ int Master::Run()
sWorldSocketMgr->Wait (); 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); loginDatabase.PExecute("UPDATE realmlist SET color = 2 WHERE id = '%d'",realmID);
///- Remove signal handling before leaving ///- Remove signal handling before leaving
@ -324,10 +332,10 @@ int Master::Run()
world_thread.wait(); world_thread.wait();
rar_thread.wait (); rar_thread.wait ();
///- Clean database before leaving ///- Clean account database before leaving
clearOnlineAccounts(); clearOnlineAccounts();
///- Wait for delay threads to end ///- Wait for DB delay threads to end
CharacterDatabase.HaltDelayThread(); CharacterDatabase.HaltDelayThread();
WorldDatabase.HaltDelayThread(); WorldDatabase.HaltDelayThread();
loginDatabase.HaltDelayThread(); loginDatabase.HaltDelayThread();
@ -388,7 +396,7 @@ int Master::Run()
// fixes a memory leak related to detaching threads from the module // fixes a memory leak related to detaching threads from the module
UnloadScriptingModule(); UnloadScriptingModule();
// Exit the process with specified return value ///- Exit the process with specified return value
return World::GetExitCode(); return World::GetExitCode();
} }

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "8902" #define REVISION_NR "8903"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__