diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/shared/Database/SqlOperations.cpp | 13 | ||||
-rw-r--r-- | src/shared/Database/SqlOperations.h | 7 |
2 files changed, 9 insertions, 11 deletions
diff --git a/src/shared/Database/SqlOperations.cpp b/src/shared/Database/SqlOperations.cpp index 793fabecde7..d657c667913 100644 --- a/src/shared/Database/SqlOperations.cpp +++ b/src/shared/Database/SqlOperations.cpp @@ -33,22 +33,17 @@ void SqlStatement::Execute(Database *db) void SqlTransaction::Execute(Database *db) { - if(m_queue.empty()) - return; + const char *sql; db->DirectExecute("START TRANSACTION"); - while(!m_queue.empty()) + while(m_queue.next(sql)) { - 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.empty()) + while(m_queue.next(sql)) { - free((void*)const_cast<char*>(m_queue.front())); - m_queue.pop(); + free((void*)const_cast<char*>(sql)); } return; } diff --git a/src/shared/Database/SqlOperations.h b/src/shared/Database/SqlOperations.h index 18641c743e1..661078f50c9 100644 --- a/src/shared/Database/SqlOperations.h +++ b/src/shared/Database/SqlOperations.h @@ -24,6 +24,7 @@ #include "Common.h" #include "ace/Thread_Mutex.h" +#include "ace/Recursive_Thread_Mutex.h" #include "LockedQueue.h" #include <queue> #include "Utilities/Callback.h" @@ -56,11 +57,13 @@ class SqlStatement : public SqlOperation class SqlTransaction : public SqlOperation { + typedef ACE_Based::LockedQueue<const char *, ACE_Recursive_Thread_Mutex> LockedQueue; + private: - std::queue<const char *> m_queue; + LockedQueue m_queue; public: SqlTransaction() {} - void DelayExecute(const char *sql) { m_queue.push(strdup(sql)); } + void DelayExecute(const char *sql) { m_queue.add(strdup(sql)); } void Execute(Database *db); }; |