The branch, master has been updated
       via  dea9621680062b3726ad15cbec4a9d2cf7ce824e (commit)
       via  e503148225a8b634cea57db65983e8dcdf60154d (commit)
       via  33db1e07a7631b7c7370a43747a65a43df88b1b1 (commit)
       via  549c30e9fe937f5c5aa7d63f5522af47f6fbed5c (commit)
       via  eb177592b5ab5042719be53df717df91f8cfb6aa (commit)
      from  c7df04633969f3d50214fcc5916ed695208b9bf2 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit dea9621680062b3726ad15cbec4a9d2cf7ce824e
Author: Volker Lendecke <v...@samba.org>
Date:   Sun Mar 8 12:25:10 2009 +0100

    Don't copy the winbindd_request in wb_trans

commit e503148225a8b634cea57db65983e8dcdf60154d
Author: Volker Lendecke <v...@samba.org>
Date:   Sun Mar 8 12:22:29 2009 +0100

    Convert wb_open_pipe to tevent_req

commit 33db1e07a7631b7c7370a43747a65a43df88b1b1
Author: Volker Lendecke <v...@samba.org>
Date:   Sun Mar 8 12:15:39 2009 +0100

    Convert wb_connect to tevent_req

commit 549c30e9fe937f5c5aa7d63f5522af47f6fbed5c
Author: Volker Lendecke <v...@samba.org>
Date:   Sun Mar 8 12:10:00 2009 +0100

    Convert wb_int_trans to tevent_req

commit eb177592b5ab5042719be53df717df91f8cfb6aa
Author: Volker Lendecke <v...@samba.org>
Date:   Sun Mar 8 11:33:03 2009 +0100

    Add parameter "queue" to wb_int_trans_send

-----------------------------------------------------------------------

Summary of changes:
 source3/include/wbc_async.h |    2 +-
 source3/lib/wbclient.c      |  273 ++++++++++++++++++-------------------------
 2 files changed, 115 insertions(+), 160 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/wbc_async.h b/source3/include/wbc_async.h
index 5aac64d..b5e769f 100644
--- a/source3/include/wbc_async.h
+++ b/source3/include/wbc_async.h
@@ -30,7 +30,7 @@ struct wb_context {
 
 struct async_req *wb_trans_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                                struct wb_context *wb_ctx, bool need_priv,
-                               const struct winbindd_request *wb_req);
+                               struct winbindd_request *wb_req);
 wbcErr wb_trans_recv(struct async_req *req, TALLOC_CTX *mem_ctx,
                     struct winbindd_response **presponse);
 struct wb_context *wb_context_init(TALLOC_CTX *mem_ctx);
diff --git a/source3/lib/wbclient.c b/source3/lib/wbclient.c
index d299914..8093764 100644
--- a/source3/lib/wbclient.c
+++ b/source3/lib/wbclient.c
@@ -153,21 +153,20 @@ struct wb_connect_state {
 
 static void wbc_connect_connected(struct tevent_req *subreq);
 
-static struct async_req *wb_connect_send(TALLOC_CTX *mem_ctx,
+static struct tevent_req *wb_connect_send(TALLOC_CTX *mem_ctx,
                                          struct tevent_context *ev,
                                          struct wb_context *wb_ctx,
                                          const char *dir)
 {
-       struct async_req *result;
-       struct tevent_req *subreq;
+       struct tevent_req *result, *subreq;
        struct wb_connect_state *state;
        struct sockaddr_un sunaddr;
        struct stat st;
        char *path = NULL;
        wbcErr wbc_err;
 
-       if (!async_req_setup(mem_ctx, &result, &state,
-                            struct wb_connect_state)) {
+       result = tevent_req_create(mem_ctx, &state, struct wb_connect_state);
+       if (result == NULL) {
                return NULL;
        }
 
@@ -232,59 +231,32 @@ static struct async_req *wb_connect_send(TALLOC_CTX 
*mem_ctx,
 
        return result;
 
- nomem:
-       wbc_err = WBC_ERR_NO_MEMORY;
  post_status:
-       if (async_post_error(result, ev, wbc_err)) {
-               return result;
-       }
+       tevent_req_error(result, wbc_err);
+       return tevent_req_post(result, ev);
+ nomem:
        TALLOC_FREE(result);
        return NULL;
 }
 
 static void wbc_connect_connected(struct tevent_req *subreq)
 {
-       struct async_req *req =
-               tevent_req_callback_data(subreq, struct async_req);
+       struct tevent_req *req = tevent_req_callback_data(
+               subreq, struct tevent_req);
        int res, err;
 
        res = async_connect_recv(subreq, &err);
        TALLOC_FREE(subreq);
        if (res == -1) {
-               async_req_error(req, map_wbc_err_from_errno(err));
+               tevent_req_error(req, map_wbc_err_from_errno(err));
                return;
        }
-       async_req_done(req);
-}
-
-static wbcErr wb_connect_recv(struct async_req *req)
-{
-       return async_req_simple_recv_wbcerr(req);
+       tevent_req_done(req);
 }
 
-static struct winbindd_request *winbindd_request_copy(
-       TALLOC_CTX *mem_ctx,
-       const struct winbindd_request *req)
+static wbcErr wb_connect_recv(struct tevent_req *req)
 {
-       struct winbindd_request *result;
-
-       result = (struct winbindd_request *)TALLOC_MEMDUP(
-               mem_ctx, req, sizeof(struct winbindd_request));
-       if (result == NULL) {
-               return NULL;
-       }
-
-       if (result->extra_len == 0) {
-               return result;
-       }
-
-       result->extra_data.data = (char *)TALLOC_MEMDUP(
-               result, result->extra_data.data, result->extra_len);
-       if (result->extra_data.data == NULL) {
-               TALLOC_FREE(result);
-               return NULL;
-       }
-       return result;
+       return tevent_req_simple_recv_wbcerr(req);
 }
 
 struct wb_int_trans_state {
@@ -297,35 +269,32 @@ struct wb_int_trans_state {
 static void wb_int_trans_write_done(struct tevent_req *subreq);
 static void wb_int_trans_read_done(struct tevent_req *subreq);
 
-static struct async_req *wb_int_trans_send(TALLOC_CTX *mem_ctx,
-                                          struct tevent_context *ev, int fd,
-                                          struct winbindd_request *wb_req)
+static struct tevent_req *wb_int_trans_send(TALLOC_CTX *mem_ctx,
+                                           struct tevent_context *ev,
+                                           struct tevent_queue *queue, int fd,
+                                           struct winbindd_request *wb_req)
 {
-       struct async_req *result;
-       struct tevent_req *subreq;
+       struct tevent_req *result, *subreq;
        struct wb_int_trans_state *state;
 
-       if (!async_req_setup(mem_ctx, &result, &state,
-                            struct wb_int_trans_state)) {
+       result = tevent_req_create(mem_ctx, &state,
+                                  struct wb_int_trans_state);
+       if (result == NULL) {
                return NULL;
        }
 
        if (winbind_closed_fd(fd)) {
-               if (!async_post_error(result, ev,
-                                     WBC_ERR_WINBIND_NOT_AVAILABLE)) {
-                       goto fail;
-               }
-               return result;
+               tevent_req_error(result, WBC_ERR_WINBIND_NOT_AVAILABLE);
+               return tevent_req_post(result, ev);
        }
 
        state->ev = ev;
        state->fd = fd;
        state->wb_req = wb_req;
-
        state->wb_req->length = sizeof(struct winbindd_request);
        state->wb_req->pid = getpid();
 
-       subreq = wb_req_write_send(state, state->ev, NULL, state->fd,
+       subreq = wb_req_write_send(state, state->ev, queue, state->fd,
                                   state->wb_req);
        if (subreq == NULL) {
                goto fail;
@@ -341,21 +310,21 @@ static struct async_req *wb_int_trans_send(TALLOC_CTX 
*mem_ctx,
 
 static void wb_int_trans_write_done(struct tevent_req *subreq)
 {
-       struct async_req *req = tevent_req_callback_data(
-               subreq, struct async_req);
-       struct wb_int_trans_state *state = talloc_get_type_abort(
-               req->private_data, struct wb_int_trans_state);
+       struct tevent_req *req = tevent_req_callback_data(
+               subreq, struct tevent_req);
+       struct wb_int_trans_state *state = tevent_req_data(
+               req, struct wb_int_trans_state);
        wbcErr wbc_err;
 
        wbc_err = wb_req_write_recv(subreq);
        TALLOC_FREE(subreq);
        if (!WBC_ERROR_IS_OK(wbc_err)) {
-               async_req_error(req, wbc_err);
+               tevent_req_error(req, wbc_err);
                return;
        }
 
        subreq = wb_resp_read_send(state, state->ev, state->fd);
-       if (async_req_nomem(subreq, req)) {
+       if (tevent_req_nomem(subreq, req)) {
                return;
        }
        tevent_req_set_callback(subreq, wb_int_trans_read_done, req);
@@ -363,31 +332,31 @@ static void wb_int_trans_write_done(struct tevent_req 
*subreq)
 
 static void wb_int_trans_read_done(struct tevent_req *subreq)
 {
-       struct async_req *req = tevent_req_callback_data(
-               subreq, struct async_req);
-       struct wb_int_trans_state *state = talloc_get_type_abort(
-               req->private_data, struct wb_int_trans_state);
+       struct tevent_req *req = tevent_req_callback_data(
+               subreq, struct tevent_req);
+       struct wb_int_trans_state *state = tevent_req_data(
+               req, struct wb_int_trans_state);
        wbcErr wbc_err;
 
        wbc_err = wb_resp_read_recv(subreq, state, &state->wb_resp);
        TALLOC_FREE(subreq);
        if (!WBC_ERROR_IS_OK(wbc_err)) {
-               async_req_error(req, wbc_err);
+               tevent_req_error(req, wbc_err);
                return;
        }
 
-       async_req_done(req);
+       tevent_req_done(req);
 }
 
-static wbcErr wb_int_trans_recv(struct async_req *req,
+static wbcErr wb_int_trans_recv(struct tevent_req *req,
                                TALLOC_CTX *mem_ctx,
                                struct winbindd_response **presponse)
 {
-       struct wb_int_trans_state *state = talloc_get_type_abort(
-               req->private_data, struct wb_int_trans_state);
+       struct wb_int_trans_state *state = tevent_req_data(
+               req, struct wb_int_trans_state);
        wbcErr wbc_err;
 
-       if (async_req_is_wbcerr(req, &wbc_err)) {
+       if (tevent_req_is_wbcerr(req, &wbc_err)) {
                return wbc_err;
        }
 
@@ -416,22 +385,21 @@ struct wb_open_pipe_state {
        struct winbindd_request wb_req;
 };
 
-static void wb_open_pipe_connect_nonpriv_done(struct async_req *subreq);
-static void wb_open_pipe_ping_done(struct async_req *subreq);
-static void wb_open_pipe_getpriv_done(struct async_req *subreq);
-static void wb_open_pipe_connect_priv_done(struct async_req *subreq);
+static void wb_open_pipe_connect_nonpriv_done(struct tevent_req *subreq);
+static void wb_open_pipe_ping_done(struct tevent_req *subreq);
+static void wb_open_pipe_getpriv_done(struct tevent_req *subreq);
+static void wb_open_pipe_connect_priv_done(struct tevent_req *subreq);
 
-static struct async_req *wb_open_pipe_send(TALLOC_CTX *mem_ctx,
-                                          struct tevent_context *ev,
-                                          struct wb_context *wb_ctx,
-                                          bool need_priv)
+static struct tevent_req *wb_open_pipe_send(TALLOC_CTX *mem_ctx,
+                                           struct tevent_context *ev,
+                                           struct wb_context *wb_ctx,
+                                           bool need_priv)
 {
-       struct async_req *result;
-       struct async_req *subreq;
+       struct tevent_req *result, *subreq;
        struct wb_open_pipe_state *state;
 
-       if (!async_req_setup(mem_ctx, &result, &state,
-                            struct wb_open_pipe_state)) {
+       result = tevent_req_create(mem_ctx, &state, struct wb_open_pipe_state);
+       if (result == NULL) {
                return NULL;
        }
        state->wb_ctx = wb_ctx;
@@ -447,9 +415,8 @@ static struct async_req *wb_open_pipe_send(TALLOC_CTX 
*mem_ctx,
        if (subreq == NULL) {
                goto fail;
        }
-
-       subreq->async.fn = wb_open_pipe_connect_nonpriv_done;
-       subreq->async.priv = result;
+       tevent_req_set_callback(subreq, wb_open_pipe_connect_nonpriv_done,
+                               result);
        return result;
 
  fail:
@@ -457,81 +424,77 @@ static struct async_req *wb_open_pipe_send(TALLOC_CTX 
*mem_ctx,
        return NULL;
 }
 
-static void wb_open_pipe_connect_nonpriv_done(struct async_req *subreq)
+static void wb_open_pipe_connect_nonpriv_done(struct tevent_req *subreq)
 {
-       struct async_req *req = talloc_get_type_abort(
-               subreq->async.priv, struct async_req);
-       struct wb_open_pipe_state *state = talloc_get_type_abort(
-               req->private_data, struct wb_open_pipe_state);
+       struct tevent_req *req = tevent_req_callback_data(
+               subreq, struct tevent_req);
+       struct wb_open_pipe_state *state = tevent_req_data(
+               req, struct wb_open_pipe_state);
        wbcErr wbc_err;
 
        wbc_err = wb_connect_recv(subreq);
        TALLOC_FREE(subreq);
        if (!WBC_ERROR_IS_OK(wbc_err)) {
                state->wb_ctx->is_priv = true;
-               async_req_error(req, wbc_err);
+               tevent_req_error(req, wbc_err);
                return;
        }
 
        ZERO_STRUCT(state->wb_req);
        state->wb_req.cmd = WINBINDD_INTERFACE_VERSION;
 
-       subreq = wb_int_trans_send(state, state->ev, state->wb_ctx->fd,
+       subreq = wb_int_trans_send(state, state->ev, NULL, state->wb_ctx->fd,
                                   &state->wb_req);
-       if (async_req_nomem(subreq, req)) {
+       if (tevent_req_nomem(subreq, req)) {
                return;
        }
-
-       subreq->async.fn = wb_open_pipe_ping_done;
-       subreq->async.priv = req;
+       tevent_req_set_callback(subreq, wb_open_pipe_ping_done, req);
 }
 
-static void wb_open_pipe_ping_done(struct async_req *subreq)
+static void wb_open_pipe_ping_done(struct tevent_req *subreq)
 {
-       struct async_req *req = talloc_get_type_abort(
-               subreq->async.priv, struct async_req);
-       struct wb_open_pipe_state *state = talloc_get_type_abort(
-               req->private_data, struct wb_open_pipe_state);
+       struct tevent_req *req = tevent_req_callback_data(
+               subreq, struct tevent_req);
+       struct wb_open_pipe_state *state = tevent_req_data(
+               req, struct wb_open_pipe_state);
        struct winbindd_response *wb_resp;
        wbcErr wbc_err;
 
        wbc_err = wb_int_trans_recv(subreq, state, &wb_resp);
        TALLOC_FREE(subreq);
        if (!WBC_ERROR_IS_OK(wbc_err)) {
-               async_req_error(req, wbc_err);
+               tevent_req_error(req, wbc_err);
                return;
        }
 
        if (!state->need_priv) {
-               async_req_done(req);
+               tevent_req_done(req);
                return;
        }
 
        state->wb_req.cmd = WINBINDD_PRIV_PIPE_DIR;
 
-       subreq = wb_int_trans_send(state, state->ev, state->wb_ctx->fd,
+       subreq = wb_int_trans_send(state, state->ev, NULL, state->wb_ctx->fd,
                                   &state->wb_req);
-       if (async_req_nomem(subreq, req)) {
+       if (tevent_req_nomem(subreq, req)) {
                return;
        }
-
-       subreq->async.fn = wb_open_pipe_getpriv_done;
-       subreq->async.priv = req;
+       tevent_req_set_callback(subreq, wb_open_pipe_getpriv_done, req);
 }
 
-static void wb_open_pipe_getpriv_done(struct async_req *subreq)
+static void wb_open_pipe_getpriv_done(struct tevent_req *subreq)
 {
-       struct async_req *req = talloc_get_type_abort(
-               subreq->async.priv, struct async_req);
-       struct wb_open_pipe_state *state = talloc_get_type_abort(
-               req->private_data, struct wb_open_pipe_state);
+       struct tevent_req *req = tevent_req_callback_data(
+               subreq, struct tevent_req);
+       struct wb_open_pipe_state *state = tevent_req_data(
+               req, struct wb_open_pipe_state);
        struct winbindd_response *wb_resp = NULL;
        wbcErr wbc_err;
 
        wbc_err = wb_int_trans_recv(subreq, state, &wb_resp);
        TALLOC_FREE(subreq);
        if (!WBC_ERROR_IS_OK(wbc_err)) {
-               async_req_error(req, wbc_err);
+               tevent_req_error(req, wbc_err);
                return;
        }
 
@@ -539,37 +502,35 @@ static void wb_open_pipe_getpriv_done(struct async_req 
*subreq)
        state->wb_ctx->fd = -1;
 
        subreq = wb_connect_send(state, state->ev, state->wb_ctx,
-                                (char *)wb_resp->extra_data.data);
+                                 (char *)wb_resp->extra_data.data);
        TALLOC_FREE(wb_resp);
-       if (async_req_nomem(subreq, req)) {
+       if (tevent_req_nomem(subreq, req)) {
                return;
        }
-
-       subreq->async.fn = wb_open_pipe_connect_priv_done;
-       subreq->async.priv = req;
+       tevent_req_set_callback(subreq, wb_open_pipe_connect_priv_done, req);
 }
 
-static void wb_open_pipe_connect_priv_done(struct async_req *subreq)
+static void wb_open_pipe_connect_priv_done(struct tevent_req *subreq)
 {
-       struct async_req *req = talloc_get_type_abort(
-               subreq->async.priv, struct async_req);
-       struct wb_open_pipe_state *state = talloc_get_type_abort(
-               req->private_data, struct wb_open_pipe_state);
+       struct tevent_req *req = tevent_req_callback_data(
+               subreq, struct tevent_req);
+       struct wb_open_pipe_state *state = tevent_req_data(
+               req, struct wb_open_pipe_state);
        wbcErr wbc_err;
 
        wbc_err = wb_connect_recv(subreq);
        TALLOC_FREE(subreq);
        if (!WBC_ERROR_IS_OK(wbc_err)) {
-               async_req_error(req, wbc_err);
+               tevent_req_error(req, wbc_err);
                return;
        }
        state->wb_ctx->is_priv = true;
-       async_req_done(req);
+       tevent_req_done(req);
 }
 
-static wbcErr wb_open_pipe_recv(struct async_req *req)
+static wbcErr wb_open_pipe_recv(struct tevent_req *req)
 {
-       return async_req_simple_recv_wbcerr(req);
+       return tevent_req_simple_recv_wbcerr(req);
 }
 
 struct wb_trans_state {
@@ -582,15 +543,15 @@ struct wb_trans_state {
        bool need_priv;
 };
 
-static void wb_trans_connect_done(struct async_req *subreq);
-static void wb_trans_done(struct async_req *subreq);
+static void wb_trans_connect_done(struct tevent_req *subreq);
+static void wb_trans_done(struct tevent_req *subreq);
 static void wb_trans_retry_wait_done(struct async_req *subreq);
 
 static void wb_trigger_trans(struct async_req *req)
 {
        struct wb_trans_state *state = talloc_get_type_abort(
                req->private_data, struct wb_trans_state);
-       struct async_req *subreq;
+       struct tevent_req *subreq;
 
        if ((state->wb_ctx->fd == -1)
            || (state->need_priv && !state->wb_ctx->is_priv)) {
@@ -600,23 +561,21 @@ static void wb_trigger_trans(struct async_req *req)
                if (async_req_nomem(subreq, req)) {
                        return;
                }
-               subreq->async.fn = wb_trans_connect_done;
-               subreq->async.priv = req;
+               tevent_req_set_callback(subreq, wb_trans_connect_done, req);
                return;
        }
 
-       subreq = wb_int_trans_send(state, state->ev, state->wb_ctx->fd,
+       subreq = wb_int_trans_send(state, state->ev, NULL, state->wb_ctx->fd,
                                   state->wb_req);
        if (async_req_nomem(subreq, req)) {
                return;
        }
-       subreq->async.fn = wb_trans_done;
-       subreq->async.priv = req;
+       tevent_req_set_callback(subreq, wb_trans_done, req);
 }
 
 struct async_req *wb_trans_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                                struct wb_context *wb_ctx, bool need_priv,
-                               const struct winbindd_request *wb_req)
+                               struct winbindd_request *wb_req)
 {
        struct async_req *result;
        struct wb_trans_state *state;
@@ -627,10 +586,7 @@ struct async_req *wb_trans_send(TALLOC_CTX *mem_ctx, 
struct tevent_context *ev,
        }
        state->wb_ctx = wb_ctx;
        state->ev = ev;
-       state->wb_req = winbindd_request_copy(state, wb_req);
-       if (state->wb_req == NULL) {
-               goto fail;
-       }
+       state->wb_req = wb_req;
        state->num_retries = 10;
        state->need_priv = need_priv;
 
@@ -694,6 +650,7 @@ static void wb_trans_retry_wait_done(struct async_req 
*subreq)
                subreq->async.priv, struct async_req);
        struct wb_trans_state *state = talloc_get_type_abort(
                req->private_data, struct wb_trans_state);
+       struct tevent_req *subreq2;
        bool ret;
 
        ret = async_wait_recv(subreq);
@@ -703,21 +660,21 @@ static void wb_trans_retry_wait_done(struct async_req 
*subreq)


-- 
Samba Shared Repository

Reply via email to