commit b0316a45ce474785fc05a01ed45b9c98f755ae91
parent 22817b0d0706d3910210d2139c62abd9858d6b8d
Author: cfillion <cfillion@users.noreply.github.com>
Date: Sun, 17 Jan 2016 17:33:23 -0500
exclusively lock the database when a transaction is running
Diffstat:
3 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/src/registry.cpp b/src/registry.cpp
@@ -51,6 +51,9 @@ Registry::Registry(const Path &path)
"WHERE remote = ? AND category = ? AND package = ? "
"LIMIT 1"
);
+
+ // lock the database
+ m_db.exec("BEGIN EXCLUSIVE TRANSACTION");
}
void Registry::push(Version *ver)
@@ -93,6 +96,11 @@ Registry::QueryResult Registry::query(Package *pkg) const
return {status, version};
}
+void Registry::commit()
+{
+ m_db.exec("COMMIT TRANSACTION");
+}
+
bool Registry::addToREAPER(Version *ver, const Path &root)
{
if(ver->package()->type() != Package::ScriptType)
diff --git a/src/registry.hpp b/src/registry.hpp
@@ -44,6 +44,7 @@ public:
};
void push(Version *);
+ void commit();
bool addToREAPER(Version *ver, const Path &root);
diff --git a/src/transaction.cpp b/src/transaction.cpp
@@ -192,6 +192,8 @@ void Transaction::finish()
if(!m_isCancelled) {
for(Task *task : m_tasks)
task->commit();
+
+ m_registry->commit();
}
m_onFinish();