diff options
Diffstat (limited to 'src')
| -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);  };  | 
