diff options
author | Andrew Bartlett <abartlet@samba.org> | 2008-09-11 20:51:26 +1000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2008-09-11 20:51:26 +1000 |
commit | ab555eb1990f81942bf119bb42e922c92b2e932b (patch) | |
tree | 4b4cb9ab58c8c6a6d24f621b2ea4d0d85f228239 /source4/dsdb/schema | |
parent | d30caa011cb86d23ed2201489520454d21d14b85 (diff) | |
download | samba-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)
Diffstat (limited to 'source4/dsdb/schema')
-rw-r--r-- | source4/dsdb/schema/schema_set.c | 17 |
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; |