aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/authserver/Main.cpp2
-rw-r--r--src/server/shared/Database/DatabaseWorker.cpp7
-rwxr-xr-xsrc/server/shared/Database/DatabaseWorkerPool.h5
-rwxr-xr-xsrc/server/shared/Database/MySQLConnection.cpp4
-rwxr-xr-xsrc/server/worldserver/Master.cpp2
5 files changed, 13 insertions, 7 deletions
diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp
index 01a33d836d6..bd155725465 100755
--- a/src/server/authserver/Main.cpp
+++ b/src/server/authserver/Main.cpp
@@ -246,8 +246,6 @@ extern int main(int argc, char **argv)
// Initialize connection to the database
bool StartDB()
{
- MySQL::Library_Init();
-
std::string dbstring = ConfigMgr::GetStringDefault("LoginDatabaseInfo", "");
if (dbstring.empty())
{
diff --git a/src/server/shared/Database/DatabaseWorker.cpp b/src/server/shared/Database/DatabaseWorker.cpp
index 662c879ad5e..8dc9ab4669d 100644
--- a/src/server/shared/Database/DatabaseWorker.cpp
+++ b/src/server/shared/Database/DatabaseWorker.cpp
@@ -34,6 +34,11 @@ int DatabaseWorker::svc()
if (!m_queue)
return -1;
+ //! Since this is called from the worker thread itself, we can ensure
+ //! that thread-specific variables remain in this thread.
+ if (!m_conn->Open())
+ return -1;
+
SQLOperation *request = NULL;
while (1)
{
@@ -47,5 +52,7 @@ int DatabaseWorker::svc()
delete request;
}
+ //! Clean up thread-specific variables
+ m_conn->Close();
return 0;
}
diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h
index 01b79c9ac58..811db775004 100755
--- a/src/server/shared/Database/DatabaseWorkerPool.h
+++ b/src/server/shared/Database/DatabaseWorkerPool.h
@@ -53,7 +53,7 @@ class DatabaseWorkerPool
public:
/* Activity state */
DatabaseWorkerPool() :
- m_queue(new ACE_Activation_Queue(new ACE_Message_Queue<ACE_MT_SYNCH>))
+ m_queue(new ACE_Activation_Queue())
{
memset(m_connectionCount, 0, sizeof(m_connectionCount));
m_connections.resize(IDX_SIZE);
@@ -77,7 +77,6 @@ class DatabaseWorkerPool
for (uint8 i = 0; i < async_threads; ++i)
{
T* t = new T(m_queue, m_connectionInfo);
- res &= t->Open();
m_connections[IDX_ASYNC][i] = t;
++m_connectionCount[IDX_ASYNC];
}
@@ -111,7 +110,6 @@ class DatabaseWorkerPool
DatabaseWorker* worker = t->m_worker;
worker->wait();
delete worker;
- t->Close();
}
sLog->outSQLDriver("Asynchronous connections on databasepool '%s' terminated. Proceeding with synchronous connections.", m_connectionInfo.database.c_str());
@@ -125,6 +123,7 @@ class DatabaseWorkerPool
t->Close();
}
+ delete m_queue;
sLog->outSQLDriver("All connections on databasepool %s closed.", m_connectionInfo.database.c_str());
}
diff --git a/src/server/shared/Database/MySQLConnection.cpp b/src/server/shared/Database/MySQLConnection.cpp
index f686db4c199..273d2842505 100755
--- a/src/server/shared/Database/MySQLConnection.cpp
+++ b/src/server/shared/Database/MySQLConnection.cpp
@@ -68,9 +68,13 @@ MySQLConnection::~MySQLConnection()
}
mysql_close(m_Mysql);
+ MySQL::Thread_End();
Unlock(); /// Unlock while we die, how ironic
}
+//! Can be called synchronously in DatabaseWorkerPool, in which thread-specific variables initialized in the main thread
+//! are deallocated.
+//! Can also be called by worker threads, in which their respective thread-specific variables are deallocated.
void MySQLConnection::Close()
{
/// Only close us if we're not operating
diff --git a/src/server/worldserver/Master.cpp b/src/server/worldserver/Master.cpp
index f1be4a6889b..258481350d2 100755
--- a/src/server/worldserver/Master.cpp
+++ b/src/server/worldserver/Master.cpp
@@ -362,8 +362,6 @@ int Master::Run()
/// Initialize connection to the databases
bool Master::_StartDB()
{
- MySQL::Library_Init();
-
sLog->SetLogDB(false);
std::string dbstring;
uint8 async_threads, synch_threads;