[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-246-gdea9621

Volker Lendecke vlendec at samba.org
Sun Mar 8 11:47:04 GMT 2009


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 <vl at 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 <vl at samba.org>
Date:   Sun Mar 8 12:22:29 2009 +0100

    Convert wb_open_pipe to tevent_req

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

    Convert wb_connect to tevent_req

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

    Convert wb_int_trans to tevent_req

commit eb177592b5ab5042719be53df717df91f8cfb6aa
Author: Volker Lendecke <vl at 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


More information about the samba-cvs mailing list