mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 00:48:56 +01:00
[8318] Deleted as expected runnable objects at related Thread deleting for avoid memory leaks. Author: VladimirMangos
[8319] Restore compile PGSQL support after last changes. Author: ApoC --HG-- branch : trunk
This commit is contained in:
@@ -41,7 +41,7 @@ class TRINITY_DLL_SPEC Database
|
||||
|
||||
TransactionQueues m_tranQueues; ///< Transaction queues from diff. threads
|
||||
QueryQueues m_queryQueues; ///< Query queues from diff threads
|
||||
SqlDelayThread* m_threadBody; ///< Pointer to delay sql executer
|
||||
SqlDelayThread* m_threadBody; ///< Pointer to delay sql executer (owned by m_delayThread)
|
||||
ACE_Based::Thread* m_delayThread; ///< Pointer to executer thread
|
||||
|
||||
public:
|
||||
|
||||
@@ -440,8 +440,8 @@ void DatabaseMysql::InitDelayThread()
|
||||
assert(!m_delayThread);
|
||||
|
||||
//New delay thread for delay execute
|
||||
m_threadBody = new MySQLDelayThread(this);
|
||||
m_delayThread = new ACE_Based::Thread(*m_threadBody);
|
||||
m_threadBody = new MySQLDelayThread(this); // will deleted at m_delayThread delete
|
||||
m_delayThread = new ACE_Based::Thread(m_threadBody);
|
||||
}
|
||||
|
||||
void DatabaseMysql::HaltDelayThread()
|
||||
|
||||
@@ -366,8 +366,8 @@ void DatabasePostgre::InitDelayThread()
|
||||
assert(!m_delayThread);
|
||||
|
||||
//New delay thread for delay execute
|
||||
m_threadBody = new PGSQLDelayThread(this);
|
||||
m_delayThread = new ACE_Based::Thread(*m_threadBody);
|
||||
m_threadBody = new PGSQLDelayThread(this); // Will be deleted on m_delayThread delete
|
||||
m_delayThread = new ACE_Based::Thread(m_threadBody);
|
||||
}
|
||||
|
||||
void DatabasePostgre::HaltDelayThread()
|
||||
|
||||
@@ -101,7 +101,7 @@ Thread::Thread() : m_task(0), m_iThreadId(0), m_hThreadHandle(0)
|
||||
|
||||
}
|
||||
|
||||
Thread::Thread(Runnable& instance) : m_task(&instance), m_iThreadId(0), m_hThreadHandle(0)
|
||||
Thread::Thread(Runnable* instance) : m_task(instance), m_iThreadId(0), m_hThreadHandle(0)
|
||||
{
|
||||
bool _start = start();
|
||||
ASSERT (_start);
|
||||
@@ -110,6 +110,9 @@ Thread::Thread(Runnable& instance) : m_task(&instance), m_iThreadId(0), m_hThrea
|
||||
Thread::~Thread()
|
||||
{
|
||||
//Wait();
|
||||
|
||||
// deleted runnable object (owned by Thread)
|
||||
delete m_task;
|
||||
}
|
||||
|
||||
//initialize Thread's class static member
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace ACE_Based
|
||||
{
|
||||
public:
|
||||
Thread();
|
||||
Thread(Runnable& instance);
|
||||
explicit Thread(Runnable* instance);
|
||||
~Thread();
|
||||
|
||||
bool start();
|
||||
|
||||
@@ -238,12 +238,14 @@ int Master::Run()
|
||||
_HookSignals();
|
||||
|
||||
///- Launch WorldRunnable thread
|
||||
ACE_Based::Thread t(*new WorldRunnable);
|
||||
t.setPriority ((ACE_Based::Priority )2);
|
||||
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
|
||||
@@ -251,10 +253,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
|
||||
@@ -315,8 +317,13 @@ int Master::Run()
|
||||
{
|
||||
FreezeDetectorRunnable *fdr = new FreezeDetectorRunnable();
|
||||
fdr->SetDelayTime(freeze_delay*1000);
|
||||
<<<<<<< HEAD:src/mangosd/Master.cpp
|
||||
ACE_Based::Thread t(*fdr);
|
||||
t.setPriority(ACE_Based::High);
|
||||
=======
|
||||
ACE_Based::Thread t(fdr);
|
||||
t.setPriority(ACE_Based::Highest);
|
||||
>>>>>>> ca55c2a9d069aaef0d3deafb4884bfd8d3884444:src/mangosd/Master.cpp
|
||||
}
|
||||
|
||||
///- Launch the world listener socket
|
||||
@@ -353,9 +360,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
|
||||
@@ -390,8 +398,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
|
||||
|
||||
@@ -928,7 +928,7 @@ bool AuthSocket::_HandleXferResume()
|
||||
ibuf.Read((char*)&start,sizeof(start));
|
||||
fseek(pPatch, start, 0);
|
||||
|
||||
ACE_Based::Thread u(*new PatcherRunnable(this));
|
||||
ACE_Based::Thread u(new PatcherRunnable(this));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -961,7 +961,7 @@ bool AuthSocket::_HandleXferAccept()
|
||||
ibuf.Remove(1); // clear input buffer
|
||||
fseek(pPatch, 0, 0);
|
||||
|
||||
ACE_Based::Thread u(*new PatcherRunnable(this));
|
||||
ACE_Based::Thread u(new PatcherRunnable(this));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user