diff options
-rw-r--r-- | src/shared/Database/SqlDelayThread.cpp | 3 | ||||
-rw-r--r-- | src/shared/Database/SqlOperations.cpp | 14 | ||||
-rw-r--r-- | src/shared/Database/SqlOperations.h | 6 |
3 files changed, 14 insertions, 9 deletions
diff --git a/src/shared/Database/SqlDelayThread.cpp b/src/shared/Database/SqlDelayThread.cpp index 6efc9717345..255a4252e03 100644 --- a/src/shared/Database/SqlDelayThread.cpp +++ b/src/shared/Database/SqlDelayThread.cpp @@ -32,13 +32,14 @@ void SqlDelayThread::run() mysql_thread_init(); #endif + SqlAsyncTask * s = NULL; // Lets wait for next async task no more than 2 secs ACE_Time_Value _time(2); while (m_running) { // if the running state gets turned off while sleeping // empty the queue before exiting - SqlAsyncTask * s = (SqlAsyncTask*)m_sqlQueue.dequeue(/*&_time*/); + s = dynamic_cast<SqlAsyncTask*> (m_sqlQueue.dequeue()); if(s) { s->call(); diff --git a/src/shared/Database/SqlOperations.cpp b/src/shared/Database/SqlOperations.cpp index d657c667913..d97e778f6d1 100644 --- a/src/shared/Database/SqlOperations.cpp +++ b/src/shared/Database/SqlOperations.cpp @@ -33,17 +33,23 @@ void SqlStatement::Execute(Database *db) void SqlTransaction::Execute(Database *db) { - const char *sql; + if (m_queue.empty()) + return; + db->DirectExecute("START TRANSACTION"); - while(m_queue.next(sql)) + while(!m_queue.empty()) { + char const *sql = m_queue.front(); + m_queue.pop(); + if(!db->DirectExecute(sql)) { free((void*)const_cast<char*>(sql)); db->DirectExecute("ROLLBACK"); - while(m_queue.next(sql)) + while(!m_queue.empty()) { - free((void*)const_cast<char*>(sql)); + free((void*)const_cast<char*>(m_queue.front())); + m_queue.pop(); } return; } diff --git a/src/shared/Database/SqlOperations.h b/src/shared/Database/SqlOperations.h index e815e514141..f6a5a0c974e 100644 --- a/src/shared/Database/SqlOperations.h +++ b/src/shared/Database/SqlOperations.h @@ -57,13 +57,11 @@ class SqlStatement : public SqlOperation class SqlTransaction : public SqlOperation { - typedef ACE_Based::LockedQueue<const char *, ACE_Thread_Mutex> LockedQueue; - private: - LockedQueue m_queue; + std::queue<const char *> m_queue; public: SqlTransaction() {} - void DelayExecute(const char *sql) { m_queue.add(strdup(sql)); } + void DelayExecute(const char *sql) { m_queue.push(strdup(sql)); } void Execute(Database *db); }; |