diff options
author | Machiavelli <none@none> | 2010-08-19 00:13:09 +0200 |
---|---|---|
committer | Machiavelli <none@none> | 2010-08-19 00:13:09 +0200 |
commit | 3932fc8c83f10c75ec4ea7a671218975de79a85c (patch) | |
tree | 553860faaa89d9d883d5253bc0962a3294051468 /src/server/shared | |
parent | fb9c6c96c73a12f261cfde3743337e83692ea426 (diff) |
- Fix Linux build (huge thanks to Aokromes for testing as always)
- Some work towards resolving the crash on shutdown by implementing a shutdown task
--HG--
branch : trunk
Diffstat (limited to 'src/server/shared')
-rw-r--r-- | src/server/shared/Database/DatabaseWorker.cpp | 7 | ||||
-rw-r--r-- | src/server/shared/Database/DatabaseWorkerPool.cpp | 15 | ||||
-rw-r--r-- | src/server/shared/Database/DatabaseWorkerPool.h | 18 | ||||
-rw-r--r-- | src/server/shared/Database/MySQLConnection.cpp | 1 | ||||
-rw-r--r-- | src/server/shared/Database/SQLOperation.h | 4 | ||||
-rw-r--r-- | src/server/shared/Threading/Callback.h | 4 |
6 files changed, 31 insertions, 18 deletions
diff --git a/src/server/shared/Database/DatabaseWorker.cpp b/src/server/shared/Database/DatabaseWorker.cpp index 17fc1d75a5d..e5e53471b76 100644 --- a/src/server/shared/Database/DatabaseWorker.cpp +++ b/src/server/shared/Database/DatabaseWorker.cpp @@ -38,16 +38,15 @@ int DatabaseWorker::svc() while (1) { request = (SQLOperation*)(m_queue->dequeue()); - if (!request) + request->SetConnection(m_conn); + if (request->call() == -1) break; - request->SetConnection(m_conn); - request->call(); delete request; } + delete request; delete m_conn; - delete this; return 0; } diff --git a/src/server/shared/Database/DatabaseWorkerPool.cpp b/src/server/shared/Database/DatabaseWorkerPool.cpp index 2e50f6bf8fa..40efc32ac04 100644 --- a/src/server/shared/Database/DatabaseWorkerPool.cpp +++ b/src/server/shared/Database/DatabaseWorkerPool.cpp @@ -61,12 +61,17 @@ void DatabaseWorkerPool::Close() { /// Shuts down worker threads for this connection pool. for (uint8 i = 0; i < m_async_connections.size(); i++) - Enqueue(NULL); - - //- MySQL::Thread_End() should be called manually from the aborting calling threads + { + Enqueue(new DatabaseWorkerPoolEnd()); + } + + m_queue->queue()->deactivate(); delete m_bundle_conn; m_bundle_conn = NULL; + + //- MySQL::Thread_End() should be called manually from the aborting calling threads + ASSERT( m_sync_connections.empty() ); } /*! This function creates a new MySQL connection for every MapUpdate thread @@ -197,7 +202,7 @@ void DatabaseWorkerPool::CommitTransaction() } } -QueryResultFuture DatabaseWorkerPool::AsyncQuery(const char* sql) +ACE_Future<QueryResult_AutoPtr> DatabaseWorkerPool::AsyncQuery(const char* sql) { QueryResultFuture res; BasicStatementTask* task = new BasicStatementTask(sql, res); @@ -205,7 +210,7 @@ QueryResultFuture DatabaseWorkerPool::AsyncQuery(const char* sql) return res; //! Fool compiler, has no use yet } -QueryResultFuture DatabaseWorkerPool::AsyncPQuery(const char* sql, ...) +ACE_Future<QueryResult_AutoPtr> DatabaseWorkerPool::AsyncPQuery(const char* sql, ...) { va_list ap; char szQuery[MAX_QUERY_LEN]; diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h index c1c645e088e..b7d2feb1eef 100644 --- a/src/server/shared/Database/DatabaseWorkerPool.h +++ b/src/server/shared/Database/DatabaseWorkerPool.h @@ -39,6 +39,20 @@ enum MySQLThreadBundle MYSQL_BUNDLE_ALL = MYSQL_BUNDLE_CLI | MYSQL_BUNDLE_RA | MYSQL_BUNDLE_RAR | MYSQL_BUNDLE_WORLD, }; +class DatabaseWorkerPoolEnd : public SQLOperation +{ + public: + //- This deletion will shut down the worker thread + int call() + { + return -1; + } + bool Execute() + { + return false; + } +}; + class DatabaseWorkerPool { public: @@ -57,8 +71,8 @@ class DatabaseWorkerPool void DirectPExecute(const char* sql, ...); QueryResult_AutoPtr Query(const char* sql); QueryResult_AutoPtr PQuery(const char* sql, ...); - QueryResultFuture AsyncQuery(const char* sql); - QueryResultFuture AsyncPQuery(const char* sql, ...); + ACE_Future<QueryResult_AutoPtr> AsyncQuery(const char* sql); + ACE_Future<QueryResult_AutoPtr> AsyncPQuery(const char* sql, ...); QueryResultHolderFuture DelayQueryHolder(SQLQueryHolder* holder); void BeginTransaction(); diff --git a/src/server/shared/Database/MySQLConnection.cpp b/src/server/shared/Database/MySQLConnection.cpp index 24dcb166d49..24573b80d74 100644 --- a/src/server/shared/Database/MySQLConnection.cpp +++ b/src/server/shared/Database/MySQLConnection.cpp @@ -40,7 +40,6 @@ m_Mysql(NULL) MySQLConnection::~MySQLConnection() { - delete m_worker; } bool MySQLConnection::Open(const std::string& infoString) diff --git a/src/server/shared/Database/SQLOperation.h b/src/server/shared/Database/SQLOperation.h index 0bf08d3e3eb..a8238802e31 100644 --- a/src/server/shared/Database/SQLOperation.h +++ b/src/server/shared/Database/SQLOperation.h @@ -31,13 +31,12 @@ class SQLOperation : public ACE_Method_Request { public: SQLOperation(){}; - int call() + virtual int call() { Execute(); return 0; } virtual bool Execute() = 0; - virtual void SetConnection(MySQLConnection* con) { m_conn = con; } MySQLConnection* m_conn; @@ -102,6 +101,7 @@ class SQLQueryHolderTask : public SQLOperation SQLQueryHolderTask(SQLQueryHolder *holder, QueryResultHolderFuture res) : m_holder(holder), m_result(res){}; bool Execute(); + }; diff --git a/src/server/shared/Threading/Callback.h b/src/server/shared/Threading/Callback.h index e016bbfa0d8..e2f3fcfc8ce 100644 --- a/src/server/shared/Threading/Callback.h +++ b/src/server/shared/Threading/Callback.h @@ -76,8 +76,4 @@ class QueryCallback ParamType param; }; -/*! ACE_Future_Set to store a bunch of unique async queries with callbacks. - (ie name queries) -*/ -typedef ACE_Future_Set<QueryResultFuture> QueryResultFutureSet; #endif
\ No newline at end of file |