aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstrongswan/plugins')
-rw-r--r--src/libstrongswan/plugins/mysql/mysql_database.c13
-rw-r--r--src/libstrongswan/plugins/sqlite/sqlite_database.c6
2 files changed, 16 insertions, 3 deletions
diff --git a/src/libstrongswan/plugins/mysql/mysql_database.c b/src/libstrongswan/plugins/mysql/mysql_database.c
index 7a612ff8b..373e9dc7c 100644
--- a/src/libstrongswan/plugins/mysql/mysql_database.c
+++ b/src/libstrongswan/plugins/mysql/mysql_database.c
@@ -652,7 +652,7 @@ METHOD(database_t, execute, int,
}
METHOD(database_t, transaction, bool,
- private_mysql_database_t *this)
+ private_mysql_database_t *this, bool serializable)
{
transaction_t *trans = NULL;
conn_t *conn;
@@ -669,6 +669,17 @@ METHOD(database_t, transaction, bool,
}
/* these statements are not supported in prepared statements that are used
* by the execute() method */
+ if (serializable)
+ {
+ if (mysql_query(conn->mysql,
+ "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE") != 0)
+ {
+ DBG1(DBG_LIB, "starting transaction failed: %s",
+ mysql_error(conn->mysql));
+ conn_release(this, conn);
+ return FALSE;
+ }
+ }
if (mysql_query(conn->mysql, "START TRANSACTION") != 0)
{
DBG1(DBG_LIB, "starting transaction failed: %s",
diff --git a/src/libstrongswan/plugins/sqlite/sqlite_database.c b/src/libstrongswan/plugins/sqlite/sqlite_database.c
index b5ed7eed2..7b4767855 100644
--- a/src/libstrongswan/plugins/sqlite/sqlite_database.c
+++ b/src/libstrongswan/plugins/sqlite/sqlite_database.c
@@ -305,9 +305,11 @@ METHOD(database_t, execute, int,
}
METHOD(database_t, transaction, bool,
- private_sqlite_database_t *this)
+ private_sqlite_database_t *this, bool serializable)
{
transaction_t *trans;
+ char *cmd = serializable ? "BEGIN EXCLUSIVE TRANSACTION"
+ : "BEGIN TRANSACTION";
trans = this->transaction->get(this->transaction);
if (trans)
@@ -315,7 +317,7 @@ METHOD(database_t, transaction, bool,
ref_get(&trans->refs);
return TRUE;
}
- if (execute(this, NULL, "BEGIN EXCLUSIVE TRANSACTION") == -1)
+ if (execute(this, NULL, cmd) == -1)
{
return FALSE;
}