aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/shared/Database/DatabaseWorker.h1
-rw-r--r--src/server/shared/Database/DatabaseWorkerPool.cpp21
2 files changed, 14 insertions, 8 deletions
diff --git a/src/server/shared/Database/DatabaseWorker.h b/src/server/shared/Database/DatabaseWorker.h
index 55f4890f31b..47cf52665b1 100644
--- a/src/server/shared/Database/DatabaseWorker.h
+++ b/src/server/shared/Database/DatabaseWorker.h
@@ -33,6 +33,7 @@ class DatabaseWorker : protected ACE_Task_Base
///- Inherited from ACE_Task_Base
int svc();
int activate();
+ int wait() { return ACE_Task_Base::wait(); }
private:
DatabaseWorker() : ACE_Task_Base() {}
diff --git a/src/server/shared/Database/DatabaseWorkerPool.cpp b/src/server/shared/Database/DatabaseWorkerPool.cpp
index b3ad3d6e676..5f6febdac61 100644
--- a/src/server/shared/Database/DatabaseWorkerPool.cpp
+++ b/src/server/shared/Database/DatabaseWorkerPool.cpp
@@ -33,6 +33,7 @@ m_connections(0)
DatabaseWorkerPool::~DatabaseWorkerPool()
{
+ mysql_library_end();
}
bool DatabaseWorkerPool::Open(const std::string& infoString, uint8 num_threads)
@@ -61,17 +62,14 @@ void DatabaseWorkerPool::Close()
{
sLog.outStaticDebug("Closing down %u connections on this DatabaseWorkerPool", (uint32)m_connections.value());
/// Shuts down worker threads for this connection pool.
- ACE_Thread_Mutex shutdown_Mtx;
- ACE_Condition_Thread_Mutex m_condition(shutdown_Mtx);
+ m_queue->queue()->deactivate();
+
for (uint8 i = 0; i < m_async_connections.size(); i++)
{
- Enqueue(new DatabaseWorkerPoolEnd(m_condition));
- m_condition.wait();
+ m_async_connections[i]->m_worker->wait();
--m_connections;
}
- m_queue->queue()->deactivate();
-
delete m_bundle_conn;
m_bundle_conn = NULL;
--m_connections;
@@ -83,8 +81,6 @@ void DatabaseWorkerPool::Close()
{
}
sLog.outStaticDebug("Synchroneous database threads exited succesfuly.");
-
- mysql_library_end();
}
/*! This function creates a new MySQL connection for every MapUpdate thread
@@ -97,6 +93,11 @@ void DatabaseWorkerPool::Init_MySQL_Connection()
{
ACE_Guard<ACE_Thread_Mutex> guard(m_connectionMap_mtx);
+ ConnectionMap::const_iterator itr = m_sync_connections.find(ACE_Based::Thread::current());
+ #ifdef _DEBUG
+ if (itr != m_sync_connections.end())
+ sLog.outError("Thread ["UI64FMTD"] already started a MySQL connection", (uint64)ACE_Based::Thread::currentId());
+ #endif
m_sync_connections[ACE_Based::Thread::current()] = conn;
}
@@ -112,6 +113,10 @@ void DatabaseWorkerPool::End_MySQL_Connection()
{
ACE_Guard<ACE_Thread_Mutex> guard(m_connectionMap_mtx);
ConnectionMap::iterator itr = m_sync_connections.find(ACE_Based::Thread::current());
+ #ifdef _DEBUG
+ if (itr == m_sync_connections.end())
+ sLog.outError("Thread ["UI64FMTD" already shut down their MySQL connection.", (uint64)ACE_Based::Thread::currentId());
+ #endif
conn = itr->second;
m_sync_connections.erase(itr);
}