diff options
author | Machiavelli <none@none> | 2010-05-26 19:19:06 +0200 |
---|---|---|
committer | Machiavelli <none@none> | 2010-05-26 19:19:06 +0200 |
commit | 7c0f140bb063e587baa4ca58aa0a2c77eff6a91f (patch) | |
tree | a680897544cb58c18cbd101131c136e7b203653e /src/shared/Database/SqlOperations.cpp | |
parent | 6da6879effad0e7b86c908fe01f14b8448da6db1 (diff) |
Use ´manual´ ACE_Thread_Mutex objects in SQLTransaction class instead of using ACE_Based::LockedQueue.
This will either result in a crash fix caused by underlying operations of ACE_Based::LockedQueue, or at least give us a clearer view at where the crash is coming from.
--HG--
branch : trunk
Diffstat (limited to 'src/shared/Database/SqlOperations.cpp')
-rw-r--r-- | src/shared/Database/SqlOperations.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/shared/Database/SqlOperations.cpp b/src/shared/Database/SqlOperations.cpp index 8894f896855..785c5cb84e7 100644 --- a/src/shared/Database/SqlOperations.cpp +++ b/src/shared/Database/SqlOperations.cpp @@ -35,35 +35,38 @@ void SqlTransaction::Execute(Database *db) { const char* sql; + m_Mutex.acquire(); if (m_queue.empty()) + { + m_Mutex.release(); return; - + } + db->DirectExecute("START TRANSACTION"); while (!m_queue.empty()) { - sql = m_queue.peek(); - m_queue.unlock(); + sql = m_queue.front(); + if (!db->DirectExecute(sql)) { free((void*)const_cast<char*>(sql)); - m_queue.pop_front(); + m_queue.pop(); db->DirectExecute("ROLLBACK"); while (!m_queue.empty()) { - sql = m_queue.peek(); - m_queue.unlock(); - free((void*)const_cast<char*>(sql)); - m_queue.pop_front(); + free((void*)const_cast<char*>(m_queue.front())); + m_queue.pop(); } - + m_Mutex.release(); return; } free((void*)const_cast<char*>(sql)); - m_queue.pop_front(); + m_queue.pop(); } db->DirectExecute("COMMIT"); + m_Mutex.release(); } /// ---- ASYNC QUERIES ---- |