diff options
-rw-r--r-- | src/shared/Database/Database.h | 2 | ||||
-rw-r--r-- | src/shared/Database/DatabaseMysql.cpp | 9 | ||||
-rw-r--r-- | src/shared/Database/DatabaseMysql.h | 4 | ||||
-rw-r--r-- | src/shared/Database/MySQLDelayThread.h | 2 | ||||
-rw-r--r-- | src/shared/Database/SqlDelayThread.cpp | 18 | ||||
-rw-r--r-- | src/shared/Database/SqlDelayThread.h | 2 |
6 files changed, 16 insertions, 21 deletions
diff --git a/src/shared/Database/Database.h b/src/shared/Database/Database.h index 4a0d655f55c..7f2bdaefdb7 100644 --- a/src/shared/Database/Database.h +++ b/src/shared/Database/Database.h @@ -49,7 +49,7 @@ class TRINITY_DLL_SPEC Database virtual ~Database(); virtual bool Initialize(const char *infoString); - virtual void InitDelayThread(const char *infoString) = 0; + virtual void InitDelayThread() = 0; virtual void HaltDelayThread() = 0; virtual QueryResult* Query(const char *sql) = 0; diff --git a/src/shared/Database/DatabaseMysql.cpp b/src/shared/Database/DatabaseMysql.cpp index 61801d65fe5..0189b5883f7 100644 --- a/src/shared/Database/DatabaseMysql.cpp +++ b/src/shared/Database/DatabaseMysql.cpp @@ -70,7 +70,7 @@ DatabaseMysql::~DatabaseMysql() mysql_library_end(); } -bool DatabaseMysql::Initialize(const char *infoString, bool initDelayThread) +bool DatabaseMysql::Initialize(const char *infoString) { if(!Database::Initialize(infoString)) @@ -85,8 +85,7 @@ bool DatabaseMysql::Initialize(const char *infoString, bool initDelayThread) return false; } - if(initDelayThread) - InitDelayThread(infoString); + InitDelayThread(); Tokens tokens = StrSplit(infoString, ";"); @@ -436,12 +435,12 @@ unsigned long DatabaseMysql::escape_string(char *to, const char *from, unsigned return(mysql_real_escape_string(mMysql, to, from, length)); } -void DatabaseMysql::InitDelayThread(const char* infoString) +void DatabaseMysql::InitDelayThread() { assert(!m_delayThread); //New delay thread for delay execute - m_threadBody = new MySQLDelayThread(this,infoString); + m_threadBody = new MySQLDelayThread(this); m_delayThread = new ACE_Based::Thread(*m_threadBody); } diff --git a/src/shared/Database/DatabaseMysql.h b/src/shared/Database/DatabaseMysql.h index eb667703975..4612ebfc462 100644 --- a/src/shared/Database/DatabaseMysql.h +++ b/src/shared/Database/DatabaseMysql.h @@ -46,8 +46,8 @@ class TRINITY_DLL_SPEC DatabaseMysql : public Database //! Initializes Mysql and connects to a server. /*! infoString should be formated like hostname;username;password;database. */ - bool Initialize(const char *infoString, bool initDelayThread = true); - void InitDelayThread(const char* infoString); + bool Initialize(const char *infoString); + void InitDelayThread(); void HaltDelayThread(); QueryResult* Query(const char *sql); QueryNamedResult* QueryNamed(const char *sql); diff --git a/src/shared/Database/MySQLDelayThread.h b/src/shared/Database/MySQLDelayThread.h index 12ff3337836..fcebe3fbd35 100644 --- a/src/shared/Database/MySQLDelayThread.h +++ b/src/shared/Database/MySQLDelayThread.h @@ -26,7 +26,7 @@ class MySQLDelayThread : public SqlDelayThread { public: - MySQLDelayThread(Database* db,const char* infoString) : SqlDelayThread(db, infoString) {} + MySQLDelayThread(Database* db) : SqlDelayThread(db) {} void Stop() { SqlDelayThread::Stop(); } }; #endif //__MYSQLDELAYTHREAD_H diff --git a/src/shared/Database/SqlDelayThread.cpp b/src/shared/Database/SqlDelayThread.cpp index f36cf4940ce..9a92fd5dd63 100644 --- a/src/shared/Database/SqlDelayThread.cpp +++ b/src/shared/Database/SqlDelayThread.cpp @@ -22,10 +22,8 @@ #include "Database/SqlOperations.h" #include "DatabaseEnv.h" -SqlDelayThread::SqlDelayThread(Database* db, const char* infoString) :m_running(true) +SqlDelayThread::SqlDelayThread(Database* db) : m_dbEngine(db), m_running(true) { - m_dbEngine = new DatabaseType; - ((DatabaseType*)m_dbEngine)->Initialize(infoString, false); } void SqlDelayThread::run() @@ -37,16 +35,15 @@ void SqlDelayThread::run() while (m_running) { - try + // if the running state gets turned off while sleeping + // empty the queue before exiting + ACE_Based::Thread::Sleep(10); + while (!m_sqlQueue.empty()) { s = m_sqlQueue.next(); + s->Execute(m_dbEngine); + delete s; } - catch(...) - {continue;} - if(!s) - continue; - s->Execute(m_dbEngine); - delete s; } #ifndef DO_POSTGRESQL @@ -57,6 +54,5 @@ void SqlDelayThread::run() void SqlDelayThread::Stop() { m_running = false; - m_sqlQueue.cancel(); } diff --git a/src/shared/Database/SqlDelayThread.h b/src/shared/Database/SqlDelayThread.h index 246a1325b9b..3c24d3525b7 100644 --- a/src/shared/Database/SqlDelayThread.h +++ b/src/shared/Database/SqlDelayThread.h @@ -40,7 +40,7 @@ class SqlDelayThread : public ACE_Based::Runnable SqlDelayThread(); public: - SqlDelayThread(Database* db,const char* infoString); + SqlDelayThread(Database* db); ///< Put sql statement to delay queue bool Delay(SqlOperation* sql) { m_sqlQueue.add(sql); return true; } |