summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2008-09-11 20:51:26 +1000
committerAndrew Bartlett <abartlet@samba.org>2008-09-11 20:51:26 +1000
commitab555eb1990f81942bf119bb42e922c92b2e932b (patch)
tree4b4cb9ab58c8c6a6d24f621b2ea4d0d85f228239
parentd30caa011cb86d23ed2201489520454d21d14b85 (diff)
downloadsamba-ab555eb1990f81942bf119bb42e922c92b2e932b.tar.gz
samba-ab555eb1990f81942bf119bb42e922c92b2e932b.tar.bz2
samba-ab555eb1990f81942bf119bb42e922c92b2e932b.zip
Remove the complexity of transactions from the attributes-setting code.
I think it is just too complex and error prone to init and cancel transactions during the module init code. Instead, this isn't prone to races as it will always achieve a steady state (eventually), and most cases will never do the write. Andrew Bartlett (This used to be commit d60977cc7f89f89f34187f310c91d1ab7db6ccf2)
-rw-r--r--source4/dsdb/schema/schema_set.c17
1 files changed, 1 insertions, 16 deletions
diff --git a/source4/dsdb/schema/schema_set.c b/source4/dsdb/schema/schema_set.c
index 0ca26c0fc7..3f5ddd8446 100644
--- a/source4/dsdb/schema/schema_set.c
+++ b/source4/dsdb/schema/schema_set.c
@@ -115,24 +115,17 @@ static int dsdb_schema_set_attributes(struct ldb_context *ldb, struct dsdb_schem
}
- ret = ldb_transaction_start(ldb);
- if (ret != LDB_SUCCESS) {
- return ret;
- }
-
/* Try to avoid churning the attributes too much - we only want to do this if they have changed */
ret = ldb_search_exp_fmt(ldb, mem_ctx, &res, msg->dn, LDB_SCOPE_BASE, NULL, "dn=%s", ldb_dn_get_linearized(msg->dn));
if (ret == LDB_ERR_NO_SUCH_OBJECT) {
ret = ldb_add(ldb, msg);
} else if (ret != LDB_SUCCESS) {
talloc_free(mem_ctx);
- ldb_transaction_cancel(ldb);
return ret;
} else {
if (res->count != 1) {
talloc_free(mem_ctx);
- ldb_transaction_cancel(ldb);
return LDB_ERR_NO_SUCH_OBJECT;
}
@@ -149,10 +142,8 @@ static int dsdb_schema_set_attributes(struct ldb_context *ldb, struct dsdb_schem
if (ret == LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS) {
/* We might be on a read-only DB */
talloc_free(mem_ctx);
- ret = ldb_transaction_cancel(ldb);
return ret;
} else if (ret != LDB_SUCCESS) {
- ldb_transaction_cancel(ldb);
return ret;
}
@@ -163,12 +154,10 @@ static int dsdb_schema_set_attributes(struct ldb_context *ldb, struct dsdb_schem
ret = ldb_add(ldb, msg_idx);
} else if (ret != LDB_SUCCESS) {
talloc_free(mem_ctx);
- ldb_transaction_cancel(ldb);
return ret;
} else {
if (res_idx->count != 1) {
talloc_free(mem_ctx);
- ldb_transaction_cancel(ldb);
return LDB_ERR_NO_SUCH_OBJECT;
}
@@ -183,11 +172,7 @@ static int dsdb_schema_set_attributes(struct ldb_context *ldb, struct dsdb_schem
if (ret == LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS) {
/* We might be on a read-only DB */
talloc_free(mem_ctx);
- return ldb_transaction_cancel(ldb);
- } else if (ret == LDB_SUCCESS) {
- ret = ldb_transaction_commit(ldb);
- } else {
- ldb_transaction_cancel(ldb);
+ ret = LDB_SUCCESS;
}
talloc_free(mem_ctx);
return ret;