s4-dreplsrv: Add caller-specific data parameter for dreplsrv_fsmo_callback_t
authorKamen Mazdrashki <kamenim@samba.org>
Mon, 30 Aug 2010 21:01:25 +0000 (00:01 +0300)
committerKamen Mazdrashki <kamenim@samba.org>
Fri, 3 Sep 2010 10:23:47 +0000 (13:23 +0300)
It is to be used when we need to preserve a state
to be used in tha callback when dreplsrv_out_operation is completed

source4/dsdb/repl/drepl_out_pull.c
source4/dsdb/repl/drepl_ridalloc.c
source4/dsdb/repl/drepl_service.h

index e9b57a1fec9a1b542d7d8b45923b519037c7eecb..db77a4e1deb92fcac668c75763bfc5a9a8bbd00c 100644 (file)
@@ -38,7 +38,8 @@ WERROR dreplsrv_schedule_partition_pull_source(struct dreplsrv_service *s,
                                               struct dreplsrv_partition_source_dsa *source,
                                               enum drsuapi_DsExtendedOperation extended_op,
                                               uint64_t fsmo_info,
-                                              dreplsrv_fsmo_callback_t callback)
+                                              dreplsrv_fsmo_callback_t callback,
+                                              void *cb_data)
 {
        struct dreplsrv_out_operation *op;
 
@@ -50,6 +51,7 @@ WERROR dreplsrv_schedule_partition_pull_source(struct dreplsrv_service *s,
        op->extended_op = extended_op;
        op->fsmo_info   = fsmo_info;
        op->callback    = callback;
+       op->cb_data     = cb_data;
 
        DLIST_ADD_END(s->ops.pending, op, struct dreplsrv_out_operation *);
 
@@ -64,7 +66,9 @@ static WERROR dreplsrv_schedule_partition_pull(struct dreplsrv_service *s,
        struct dreplsrv_partition_source_dsa *cur;
 
        for (cur = p->sources; cur; cur = cur->next) {
-               status = dreplsrv_schedule_partition_pull_source(s, cur, DRSUAPI_EXOP_NONE, 0, NULL);
+               status = dreplsrv_schedule_partition_pull_source(s, cur,
+                                                                DRSUAPI_EXOP_NONE, 0,
+                                                                NULL, NULL);
                W_ERROR_NOT_OK_RETURN(status);
        }
 
@@ -160,7 +164,7 @@ static void dreplsrv_pending_op_callback(struct tevent_req *subreq)
 
 done:
        if (op->callback) {
-               op->callback(s, rf->result_last_attempt, op->extended_ret);
+               op->callback(s, rf->result_last_attempt, op->extended_ret, op->cb_data);
        }
        talloc_free(op);
        s->ops.current = NULL;
index c036228ee7439c5b2449d66dfc92989ed190c80c..6d4b0da04be0b416b9b4ac1bd9bd13355783a100 100644 (file)
@@ -102,7 +102,8 @@ static WERROR drepl_create_rid_manager_source_dsa(struct dreplsrv_service *servi
  */
 static void drepl_new_rid_pool_callback(struct dreplsrv_service *service,
                                        WERROR werr,
-                                       enum drsuapi_DsExtendedError ext_err)
+                                       enum drsuapi_DsExtendedError ext_err,
+                                       void *cb_data)
 {
        if (!W_ERROR_IS_OK(werr)) {
                DEBUG(0,(__location__ ": RID Manager failed RID allocation - %s - extended_ret[0x%X]\n",
@@ -139,7 +140,7 @@ static WERROR drepl_request_new_rid_pool(struct dreplsrv_service *service,
 
        werr = dreplsrv_schedule_partition_pull_source(service, service->ridalloc.rid_manager_source_dsa,
                                                       DRSUAPI_EXOP_FSMO_RID_ALLOC, alloc_pool,
-                                                      drepl_new_rid_pool_callback);
+                                                      drepl_new_rid_pool_callback, NULL);
        return werr;
 }
 
index 4019bf730700778071115d78e573c7029a3ef59f..00fd3bfbd8d1b45916f31bd893b3fadb1ba01108 100644 (file)
@@ -105,7 +105,8 @@ struct dreplsrv_partition {
 
 typedef void (*dreplsrv_fsmo_callback_t)(struct dreplsrv_service *,
                                         WERROR,
-                                        enum drsuapi_DsExtendedError);
+                                        enum drsuapi_DsExtendedError,
+                                        void *cb_data);
 
 struct dreplsrv_out_operation {
        struct dreplsrv_out_operation *prev, *next;
@@ -116,8 +117,9 @@ struct dreplsrv_out_operation {
 
        enum drsuapi_DsExtendedOperation extended_op;
        uint64_t fsmo_info;
-       dreplsrv_fsmo_callback_t callback;
        enum drsuapi_DsExtendedError extended_ret;
+       dreplsrv_fsmo_callback_t callback;
+       void *cb_data;
 };
 
 struct dreplsrv_notify_operation {