From 293ea07a2504a3c0f462b36930bbee6bdc99fe4a Mon Sep 17 00:00:00 2001 From: n0n4m3 Date: Wed, 10 Feb 2010 16:04:48 +0300 Subject: [PATCH] Revert revision: 053bfe8ad9, this cause some crash. Use dynamic_cast more is safer. I think no more crash on db code. --HG-- branch : trunk --- src/shared/Database/SqlDelayThread.cpp | 3 ++- src/shared/Database/SqlOperations.cpp | 14 ++++++++++---- 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 (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(sql)); db->DirectExecute("ROLLBACK"); - while(m_queue.next(sql)) + while(!m_queue.empty()) { - free((void*)const_cast(sql)); + free((void*)const_cast(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 LockedQueue; - private: - LockedQueue m_queue; + std::queue 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); };