All pastes #1774163 Raw Edit

Mine

public text v1 · immutable
#1774163 ·published 2010-02-01 09:24 UTC
rendered paste body
# HG changeset patch
# User thenecromancer
# Date 1265016198 -3600
# Branch trunk
# Node ID 053bfe8ad96de00564863b477d9cfd7abb1fd37a
# Parent  eed9ba2c2cf7968a42c5ba7ce021b442aa0edee8
Use recursive thread mutex for SQL transaction queue

diff -r eed9ba2c2cf7 -r 053bfe8ad96d src/shared/Database/SqlOperations.cpp
--- a/src/shared/Database/SqlOperations.cpp	Mon Feb 01 02:16:44 2010 -0300
+++ b/src/shared/Database/SqlOperations.cpp	Mon Feb 01 10:23:18 2010 +0100
@@ -33,22 +33,17 @@
 
 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 -r eed9ba2c2cf7 -r 053bfe8ad96d src/shared/Database/SqlOperations.h
--- a/src/shared/Database/SqlOperations.h	Mon Feb 01 02:16:44 2010 -0300
+++ b/src/shared/Database/SqlOperations.h	Mon Feb 01 10:23:18 2010 +0100
@@ -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 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);
 };