hook on prepare_commit instead of transaction_end
authorAndrew Tridgell <tridge@samba.org>
Thu, 3 Sep 2009 08:33:17 +0000 (18:33 +1000)
committerAndrew Tridgell <tridge@samba.org>
Thu, 3 Sep 2009 08:36:10 +0000 (18:36 +1000)
This allows for safe transaction end aborts

source4/dsdb/samdb/ldb_modules/repl_meta_data.c
source4/dsdb/samdb/ldb_modules/update_keytab.c

index 7d8635b46e906237372ad08e2d55b73dfb3f2193..da9087acbf8775edad08ff6965632db58fd0df66 100644 (file)
@@ -1736,10 +1736,10 @@ static int replmd_start_transaction(struct ldb_module *module)
 }
 
 /*
-  on end transaction we loop over our queued la_context structures and
+  on prepare commit we loop over our queued la_context structures and
   apply each of them  
  */
-static int replmd_end_transaction(struct ldb_module *module)
+static int replmd_prepare_commit(struct ldb_module *module)
 {
        struct replmd_private *replmd_private = 
                talloc_get_type(ldb_module_get_private(module), struct replmd_private);
@@ -1757,8 +1757,11 @@ static int replmd_end_transaction(struct ldb_module *module)
                        return ret;
                }
        }
+
+       talloc_free(replmd_private);
+       ldb_module_set_private(module, NULL);
        
-       return ldb_next_end_trans(module);
+       return ldb_next_prepare_commit(module);
 }
 
 static int replmd_del_transaction(struct ldb_module *module)
@@ -1777,6 +1780,6 @@ _PUBLIC_ const struct ldb_module_ops ldb_repl_meta_data_module_ops = {
        .modify        = replmd_modify,
        .extended      = replmd_extended,
        .start_transaction = replmd_start_transaction,
-       .end_transaction   = replmd_end_transaction,
+       .prepare_commit    = replmd_prepare_commit,
        .del_transaction   = replmd_del_transaction,
 };
index 302c1c8911cf618df26cb41687967d0e6d8de605..f08600ea3231933e65fa6bd68220ad2aecc8dc0b 100644 (file)
@@ -378,8 +378,8 @@ static int update_kt_rename(struct ldb_module *module, struct ldb_request *req)
        return ldb_next_request(module, down_req);
 }
 
-/* end a transaction */
-static int update_kt_end_trans(struct ldb_module *module)
+/* prepare for a commit */
+static int update_kt_prepare_commit(struct ldb_module *module)
 {
        struct ldb_context *ldb;
        struct update_kt_private *data = talloc_get_type(ldb_module_get_private(module), struct update_kt_private);
@@ -401,7 +401,7 @@ static int update_kt_end_trans(struct ldb_module *module)
        talloc_free(data->changed_dns);
        data->changed_dns = NULL;
 
-       return ldb_next_end_trans(module);
+       return ldb_next_prepare_commit(module);
 }
 
 /* end a transaction */
@@ -442,6 +442,6 @@ _PUBLIC_ const struct ldb_module_ops ldb_update_keytab_module_ops = {
        .modify            = update_kt_modify,
        .rename            = update_kt_rename,
        .del               = update_kt_delete,
-       .end_transaction   = update_kt_end_trans,
+       .prepare_commit    = update_kt_prepare_commit,
        .del_transaction   = update_kt_del_trans,
 };