summaryrefslogtreecommitdiffstats
path: root/src/db/sysdb_autofs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/db/sysdb_autofs.c')
-rw-r--r--src/db/sysdb_autofs.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/db/sysdb_autofs.c b/src/db/sysdb_autofs.c
index eff4e2969..df5f33980 100644
--- a/src/db/sysdb_autofs.c
+++ b/src/db/sysdb_autofs.c
@@ -345,8 +345,9 @@ sysdb_autofs_map_update_members(struct sysdb_ctx *sysdb,
const char *const *add_entries,
const char *const *del_entries)
{
- errno_t ret;
+ errno_t ret, sret;
int i;
+ bool in_transaction = false;
TALLOC_CTX *tmp_ctx = talloc_new(NULL);
if(!tmp_ctx) {
@@ -360,6 +361,8 @@ sysdb_autofs_map_update_members(struct sysdb_ctx *sysdb,
goto done;
}
+ in_transaction = true;
+
if (add_entries) {
/* Add the all te add_entries to the map */
for (i = 0; add_entries[i]; i++) {
@@ -389,9 +392,20 @@ sysdb_autofs_map_update_members(struct sysdb_ctx *sysdb,
}
ret = sysdb_transaction_commit(sysdb);
-done:
if (ret != EOK) {
- sysdb_transaction_cancel(sysdb);
+ DEBUG(SSSDBG_CRIT_FAILURE, ("Failed to commit transaction\n"));
+ goto done;
+ }
+
+ in_transaction = false;
+ ret = EOK;
+
+done:
+ if (in_transaction) {
+ sret = sysdb_transaction_cancel(sysdb);
+ if (sret != EOK) {
+ DEBUG(SSSDBG_CRIT_FAILURE, ("Could not cancel transaction\n"));
+ }
}
talloc_free(tmp_ctx);
return ret;