aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/shared/Database/SqlOperations.cpp23
-rw-r--r--src/shared/Database/SqlOperations.h13
2 files changed, 23 insertions, 13 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 ----
diff --git a/src/shared/Database/SqlOperations.h b/src/shared/Database/SqlOperations.h
index dcdada9cb59..f2e09c0c921 100644
--- a/src/shared/Database/SqlOperations.h
+++ b/src/shared/Database/SqlOperations.h
@@ -57,12 +57,19 @@ 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;
+ ACE_Thread_Mutex m_Mutex;
public:
SqlTransaction() {}
- void DelayExecute(const char *sql) { m_queue.add(strdup(sql)); }
+ void DelayExecute(const char *sql)
+ {
+ m_Mutex.acquire();
+ char* _sql = strdup(sql);
+ if (_sql)
+ m_queue.push(_sql);
+ m_Mutex.release();
+ }
void Execute(Database *db);
};