From e6e7bf857350f0befc0c8a845141ab79f0aa48b6 Mon Sep 17 00:00:00 2001 From: Ambal Date: Thu, 20 Jan 2011 23:06:31 +0200 Subject: [PATCH] [11053] Process all SQL requests upon SqlDelayThread object destroying which might have been added while thread was stopping. Signed-off-by: Ambal --- src/shared/Database/SqlDelayThread.cpp | 23 +++++++++++++---------- src/shared/Database/SqlDelayThread.h | 5 ++++- src/shared/revision_nr.h | 2 +- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/shared/Database/SqlDelayThread.cpp b/src/shared/Database/SqlDelayThread.cpp index b15b405db..59e75ff4a 100644 --- a/src/shared/Database/SqlDelayThread.cpp +++ b/src/shared/Database/SqlDelayThread.cpp @@ -26,10 +26,8 @@ SqlDelayThread::SqlDelayThread(Database* db, SqlConnection* conn) : m_dbEngine(d SqlDelayThread::~SqlDelayThread() { - //empty SQL queue before exiting - SqlOperation* s = NULL; - while (m_sqlQueue.next(s)) - delete s; + //process all requests which might have been queued while thread was stopping + ProcessRequests(); } void SqlDelayThread::run() @@ -49,12 +47,7 @@ void SqlDelayThread::run() // empty the queue before exiting ACE_Based::Thread::Sleep(loopSleepms); - SqlOperation* s = NULL; - while (m_sqlQueue.next(s)) - { - s->Execute(m_dbConnection); - delete s; - } + ProcessRequests(); if((loopCounter++) >= pingEveryLoop) { @@ -72,3 +65,13 @@ void SqlDelayThread::Stop() { m_running = false; } + +void SqlDelayThread::ProcessRequests() +{ + SqlOperation* s = NULL; + while (m_sqlQueue.next(s)) + { + s->Execute(m_dbConnection); + delete s; + } +} \ No newline at end of file diff --git a/src/shared/Database/SqlDelayThread.h b/src/shared/Database/SqlDelayThread.h index 167f5763c..1970a77f8 100644 --- a/src/shared/Database/SqlDelayThread.h +++ b/src/shared/Database/SqlDelayThread.h @@ -38,6 +38,9 @@ class SqlDelayThread : public ACE_Based::Runnable SqlConnection * m_dbConnection; ///< Pointer to DB connection volatile bool m_running; + //process all enqueued requests + void ProcessRequests(); + public: SqlDelayThread(Database* db, SqlConnection* conn); ~SqlDelayThread(); @@ -48,4 +51,4 @@ class SqlDelayThread : public ACE_Based::Runnable virtual void Stop(); ///< Stop event virtual void run(); ///< Main Thread loop }; -#endif //__SQLDELAYTHREAD_H +#endif //__SQLDELAYTHREAD_H \ No newline at end of file diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 2ec648a16..89fafab64 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "11052" + #define REVISION_NR "11053" #endif // __REVISION_NR_H__