aboutsummaryrefslogtreecommitdiff
path: root/src/shared/Database/SqlOperations.cpp
diff options
context:
space:
mode:
authorMachiavelli <none@none>2010-05-26 19:19:06 +0200
committerMachiavelli <none@none>2010-05-26 19:19:06 +0200
commit7c0f140bb063e587baa4ca58aa0a2c77eff6a91f (patch)
treea680897544cb58c18cbd101131c136e7b203653e /src/shared/Database/SqlOperations.cpp
parent6da6879effad0e7b86c908fe01f14b8448da6db1 (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.cpp23
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 ----