mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 19:37:02 +00:00
[8318] Deleted as expected runnable objects at related Thread deleting for avoid memory leaks.
This commit is contained in:
parent
dc8bf0f7e7
commit
0f364bf00a
7 changed files with 30 additions and 15 deletions
|
|
@ -223,12 +223,14 @@ int Master::Run()
|
|||
_HookSignals();
|
||||
|
||||
///- Launch WorldRunnable thread
|
||||
ACE_Based::Thread t(*new WorldRunnable);
|
||||
ACE_Based::Thread t(new WorldRunnable);
|
||||
t.setPriority(ACE_Based::Highest);
|
||||
|
||||
// set server online
|
||||
loginDatabase.PExecute("UPDATE realmlist SET color = 0, population = 0 WHERE id = '%d'",realmID);
|
||||
|
||||
ACE_Based::Thread* cliThread = NULL;
|
||||
|
||||
#ifdef WIN32
|
||||
if (sConfig.GetBoolDefault("Console.Enable", true) && (m_ServiceStatus == -1)/* need disable console in service mode*/)
|
||||
#else
|
||||
|
|
@ -236,10 +238,10 @@ int Master::Run()
|
|||
#endif
|
||||
{
|
||||
///- Launch CliRunnable thread
|
||||
ACE_Based::Thread td1(*new CliRunnable);
|
||||
cliThread = new ACE_Based::Thread(new CliRunnable);
|
||||
}
|
||||
|
||||
ACE_Based::Thread td2(*new RARunnable);
|
||||
ACE_Based::Thread td2(new RARunnable);
|
||||
|
||||
///- Handle affinity for multiple processors and process priority on Windows
|
||||
#ifdef WIN32
|
||||
|
|
@ -300,7 +302,7 @@ int Master::Run()
|
|||
{
|
||||
FreezeDetectorRunnable *fdr = new FreezeDetectorRunnable();
|
||||
fdr->SetDelayTime(freeze_delay*1000);
|
||||
ACE_Based::Thread t(*fdr);
|
||||
ACE_Based::Thread t(fdr);
|
||||
t.setPriority(ACE_Based::Highest);
|
||||
}
|
||||
|
||||
|
|
@ -338,9 +340,10 @@ int Master::Run()
|
|||
|
||||
sLog.outString( "Halting process..." );
|
||||
|
||||
#ifdef WIN32
|
||||
if (sConfig.GetBoolDefault("Console.Enable", true))
|
||||
if(cliThread)
|
||||
{
|
||||
#ifdef WIN32
|
||||
|
||||
// this only way to terminate CLI thread exist at Win32 (alt. way exist only in Windows Vista API)
|
||||
//_exit(1);
|
||||
// send keyboard input to safely unblock the CLI thread
|
||||
|
|
@ -375,8 +378,17 @@ int Master::Run()
|
|||
b[3].Event.KeyEvent.wRepeatCount = 1;
|
||||
DWORD numb;
|
||||
BOOL ret = WriteConsoleInput(hStdIn, b, 4, &numb);
|
||||
|
||||
cliThread->wait();
|
||||
|
||||
#else
|
||||
|
||||
cliThread->destroy();
|
||||
|
||||
#endif
|
||||
|
||||
delete cliThread;
|
||||
}
|
||||
#endif
|
||||
|
||||
// for some unknown reason, unloading scripts here and not in worldrunnable
|
||||
// fixes a memory leak related to detaching threads from the module
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue