[SCM] Samba Shared Repository - branch v3-4-test updated - release-4-0-0alpha7-370-g7a5f973

Volker Lendecke vlendec at samba.org
Mon Mar 16 19:47:55 GMT 2009


The branch, v3-4-test has been updated
       via  7a5f973b2cfde4d696b2c54f6a701062e57a547b (commit)
       via  f60b259c0805d4fd1129ad620da18ea8d7c29202 (commit)
       via  16def87b5e6271c8c5aee09781414455f1eaa7d1 (commit)
       via  157f0dc5e1385f019a159e996b3a7b5875361101 (commit)
       via  5123011f5ceb5f58db6fdade69a2c382cf5ba966 (commit)
      from  1e08799f3c5bb7059f6d355b99f8617461c31d1a (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-test


- Log -----------------------------------------------------------------
commit 7a5f973b2cfde4d696b2c54f6a701062e57a547b
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 16 20:38:11 2009 +0100

    Convert wb_trans to tevent_req

commit f60b259c0805d4fd1129ad620da18ea8d7c29202
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 16 20:25:25 2009 +0100

    Remove an unnecessary variable

commit 16def87b5e6271c8c5aee09781414455f1eaa7d1
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 16 20:23:37 2009 +0100

    Make struct wb_context private to wbclient.c

commit 157f0dc5e1385f019a159e996b3a7b5875361101
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 16 20:17:45 2009 +0100

    Remove some unused code from async_req.[ch]

commit 5123011f5ceb5f58db6fdade69a2c382cf5ba966
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 16 20:15:23 2009 +0100

    Use tevent_wakeup_send in wb_trans

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

Summary of changes:
 lib/async_req/async_req.c   |   42 ------------
 lib/async_req/async_req.h   |    9 ---
 source3/include/wbc_async.h |   17 ++---
 source3/lib/wbclient.c      |  145 ++++++++++++++++++++-----------------------
 source3/torture/torture.c   |    9 +--
 5 files changed, 78 insertions(+), 144 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/async_req/async_req.c b/lib/async_req/async_req.c
index 054c9f9..4dfe809 100644
--- a/lib/async_req/async_req.c
+++ b/lib/async_req/async_req.c
@@ -194,48 +194,6 @@ bool async_req_is_error(struct async_req *req, enum async_req_state *state,
 	return true;
 }
 
-static void async_req_timedout(struct tevent_context *ev,
-			       struct tevent_timer *te,
-			       struct timeval now,
-			       void *priv)
-{
-	struct async_req *req = talloc_get_type_abort(priv, struct async_req);
-	TALLOC_FREE(te);
-	async_req_finish(req, ASYNC_REQ_TIMED_OUT);
-}
-
-bool async_req_set_timeout(struct async_req *req, struct tevent_context *ev,
-			   struct timeval to)
-{
-	return (tevent_add_timer(
-			ev, req,
-			tevent_timeval_current_ofs(to.tv_sec, to.tv_usec),
-			async_req_timedout, req)
-		!= NULL);
-}
-
-struct async_req *async_wait_send(TALLOC_CTX *mem_ctx,
-				  struct tevent_context *ev,
-				  struct timeval to)
-{
-	struct async_req *result;
-
-	result = async_req_new(mem_ctx);
-	if (result == NULL) {
-		return result;
-	}
-	if (!async_req_set_timeout(result, ev, to)) {
-		TALLOC_FREE(result);
-		return NULL;
-	}
-	return result;
-}
-
-bool async_wait_recv(struct async_req *req)
-{
-	return true;
-}
-
 struct async_queue_entry {
 	struct async_queue_entry *prev, *next;
 	struct async_req_queue *queue;
diff --git a/lib/async_req/async_req.h b/lib/async_req/async_req.h
index fc84988..fdec1b7 100644
--- a/lib/async_req/async_req.h
+++ b/lib/async_req/async_req.h
@@ -139,15 +139,6 @@ bool async_post_error(struct async_req *req, struct tevent_context *ev,
 bool async_req_is_error(struct async_req *req, enum async_req_state *state,
 			uint64_t *error);
 
-bool async_req_set_timeout(struct async_req *req, struct tevent_context *ev,
-			   struct timeval to);
-
-struct async_req *async_wait_send(TALLOC_CTX *mem_ctx,
-				  struct tevent_context *ev,
-				  struct timeval to);
-
-bool async_wait_recv(struct async_req *req);
-
 struct async_req_queue;
 
 struct async_req_queue *async_req_queue_init(TALLOC_CTX *mem_ctx);
diff --git a/source3/include/wbc_async.h b/source3/include/wbc_async.h
index fd9b669..37f500e 100644
--- a/source3/include/wbc_async.h
+++ b/source3/include/wbc_async.h
@@ -22,16 +22,13 @@
 
 #include "nsswitch/libwbclient/wbclient.h"
 
-struct wb_context {
-	struct async_req_queue *queue;
-	int fd;
-	bool is_priv;
-};
+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,
-				struct winbindd_request *wb_req);
-wbcErr wb_trans_recv(struct async_req *req, TALLOC_CTX *mem_ctx,
+struct tevent_req *wb_trans_send(TALLOC_CTX *mem_ctx,
+				 struct tevent_context *ev,
+				 struct wb_context *wb_ctx, bool need_priv,
+				 struct winbindd_request *wb_req);
+wbcErr wb_trans_recv(struct tevent_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 8093764..3cf992c 100644
--- a/source3/lib/wbclient.c
+++ b/source3/lib/wbclient.c
@@ -20,6 +20,12 @@
 #include "includes.h"
 #include "wbc_async.h"
 
+struct wb_context {
+	struct tevent_queue *queue;
+	int fd;
+	bool is_priv;
+};
+
 static int make_nonstd_fd(int fd)
 {
 	int i;
@@ -138,7 +144,7 @@ struct wb_context *wb_context_init(TALLOC_CTX *mem_ctx)
 	if (result == NULL) {
 		return NULL;
 	}
-	result->queue = async_req_queue_init(result);
+	result->queue = tevent_queue_create(result, "wb_trans");
 	if (result->queue == NULL) {
 		TALLOC_FREE(result);
 		return NULL;
@@ -545,43 +551,18 @@ struct wb_trans_state {
 
 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_trans_retry_wait_done(struct tevent_req *subreq);
 
-static void wb_trigger_trans(struct async_req *req)
+struct tevent_req *wb_trans_send(TALLOC_CTX *mem_ctx,
+				 struct tevent_context *ev,
+				 struct wb_context *wb_ctx, bool need_priv,
+				 struct winbindd_request *wb_req)
 {
-	struct wb_trans_state *state = talloc_get_type_abort(
-		req->private_data, struct wb_trans_state);
-	struct tevent_req *subreq;
-
-	if ((state->wb_ctx->fd == -1)
-	    || (state->need_priv && !state->wb_ctx->is_priv)) {
-
-		subreq = wb_open_pipe_send(state, state->ev, state->wb_ctx,
-					   state->need_priv);
-		if (async_req_nomem(subreq, req)) {
-			return;
-		}
-		tevent_req_set_callback(subreq, wb_trans_connect_done, req);
-		return;
-	}
-
-	subreq = wb_int_trans_send(state, state->ev, NULL, state->wb_ctx->fd,
-				   state->wb_req);
-	if (async_req_nomem(subreq, req)) {
-		return;
-	}
-	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,
-				struct winbindd_request *wb_req)
-{
-	struct async_req *result;
+	struct tevent_req *req, *subreq;
 	struct wb_trans_state *state;
 
-	if (!async_req_setup(mem_ctx, &result, &state,
-			     struct wb_trans_state)) {
+	req = tevent_req_create(mem_ctx, &state, struct wb_trans_state);
+	if (req == NULL) {
 		return NULL;
 	}
 	state->wb_ctx = wb_ctx;
@@ -590,21 +571,32 @@ struct async_req *wb_trans_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
 	state->num_retries = 10;
 	state->need_priv = need_priv;
 
-	if (!async_req_enqueue(wb_ctx->queue, ev, result, wb_trigger_trans)) {
-		goto fail;
+	if ((wb_ctx->fd == -1) || (need_priv && !wb_ctx->is_priv)) {
+		subreq = wb_open_pipe_send(state, ev, wb_ctx, need_priv);
+		if (subreq == NULL) {
+			goto fail;
+		}
+		tevent_req_set_callback(subreq, wb_trans_connect_done, req);
+		return req;
 	}
-	return result;
 
+	subreq = wb_int_trans_send(state, ev, wb_ctx->queue, wb_ctx->fd,
+				   wb_req);
+	if (subreq == NULL) {
+		goto fail;
+	}
+	tevent_req_set_callback(subreq, wb_trans_done, req);
+	return req;
  fail:
-	TALLOC_FREE(result);
+	TALLOC_FREE(req);
 	return NULL;
 }
 
-static bool wb_trans_retry(struct async_req *req,
+static bool wb_trans_retry(struct tevent_req *req,
 			   struct wb_trans_state *state,
 			   wbcErr wbc_err)
 {
-	struct async_req *subreq;
+	struct tevent_req *subreq;
 
 	if (WBC_ERROR_IS_OK(wbc_err)) {
 		return false;
@@ -615,13 +607,13 @@ static bool wb_trans_retry(struct async_req *req,
 		 * Winbind not around or we can't connect to the pipe. Fail
 		 * immediately.
 		 */
-		async_req_error(req, wbc_err);
+		tevent_req_error(req, wbc_err);
 		return true;
 	}
 
 	state->num_retries -= 1;
 	if (state->num_retries == 0) {
-		async_req_error(req, wbc_err);
+		tevent_req_error(req, wbc_err);
 		return true;
 	}
 
@@ -634,47 +626,44 @@ static bool wb_trans_retry(struct async_req *req,
 		state->wb_ctx->fd = -1;
 	}
 
-	subreq = async_wait_send(state, state->ev, timeval_set(1, 0));
-	if (async_req_nomem(subreq, req)) {
+	subreq = tevent_wakeup_send(state, state->ev,
+				    timeval_current_ofs(1, 0));
+	if (tevent_req_nomem(subreq, req)) {
 		return true;
 	}
-
-	subreq->async.fn = wb_trans_retry_wait_done;
-	subreq->async.priv = req;
+	tevent_req_set_callback(subreq, wb_trans_retry_wait_done, req);
 	return true;
 }
 
-static void wb_trans_retry_wait_done(struct async_req *subreq)
+static void wb_trans_retry_wait_done(struct tevent_req *subreq)
 {
-	struct async_req *req = talloc_get_type_abort(
-		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;
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct wb_trans_state *state = tevent_req_data(
+		req, struct wb_trans_state);
 	bool ret;
 
-	ret = async_wait_recv(subreq);
+	ret = tevent_wakeup_recv(subreq);
 	TALLOC_FREE(subreq);
-	if (ret) {
-		async_req_error(req, WBC_ERR_UNKNOWN_FAILURE);
+	if (!ret) {
+		tevent_req_error(req, WBC_ERR_UNKNOWN_FAILURE);
 		return;
 	}
 
-	subreq2 = wb_open_pipe_send(state, state->ev, state->wb_ctx,
-				    state->need_priv);
-	if (async_req_nomem(subreq2, req)) {
+	subreq = wb_open_pipe_send(state, state->ev, state->wb_ctx,
+				   state->need_priv);
+	if (tevent_req_nomem(subreq, req)) {
 		return;
 	}
-	tevent_req_set_callback(subreq2, wb_trans_connect_done, req);
+	tevent_req_set_callback(subreq, wb_trans_connect_done, req);
 }
 
 static void wb_trans_connect_done(struct tevent_req *subreq)
 {
-	struct async_req *req = tevent_req_callback_data(
-		subreq, struct async_req);
-	struct wb_trans_state *state = talloc_get_type_abort(
-		req->private_data, struct wb_trans_state);
-	struct tevent_req *subreq2;
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct wb_trans_state *state = tevent_req_data(
+		req, struct wb_trans_state);
 	wbcErr wbc_err;
 
 	wbc_err = wb_open_pipe_recv(subreq);
@@ -684,20 +673,20 @@ static void wb_trans_connect_done(struct tevent_req *subreq)
 		return;
 	}
 
-	subreq2 = wb_int_trans_send(state, state->ev, NULL, state->wb_ctx->fd,
-				    state->wb_req);
-	if (async_req_nomem(subreq2, req)) {
+	subreq = wb_int_trans_send(state, state->ev, NULL, state->wb_ctx->fd,
+				   state->wb_req);
+	if (tevent_req_nomem(subreq, req)) {
 		return;
 	}
-	tevent_req_set_callback(subreq2, wb_trans_done, req);
+	tevent_req_set_callback(subreq, wb_trans_done, req);
 }
 
 static void wb_trans_done(struct tevent_req *subreq)
 {
-	struct async_req *req = tevent_req_callback_data(
-		subreq, struct async_req);
-	struct wb_trans_state *state = talloc_get_type_abort(
-		req->private_data, struct wb_trans_state);
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct wb_trans_state *state = tevent_req_data(
+		req, struct wb_trans_state);
 	wbcErr wbc_err;
 
 	wbc_err = wb_int_trans_recv(subreq, state, &state->wb_resp);
@@ -707,17 +696,17 @@ static void wb_trans_done(struct tevent_req *subreq)
 		return;
 	}
 
-	async_req_done(req);
+	tevent_req_done(req);
 }
 
-wbcErr wb_trans_recv(struct async_req *req, TALLOC_CTX *mem_ctx,
+wbcErr wb_trans_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
 		     struct winbindd_response **presponse)
 {
-	struct wb_trans_state *state = talloc_get_type_abort(
-		req->private_data, struct wb_trans_state);
+	struct wb_trans_state *state = tevent_req_data(
+		req, struct wb_trans_state);
 	wbcErr wbc_err;
 
-	if (async_req_is_wbcerr(req, &wbc_err)) {
+	if (tevent_req_is_wbcerr(req, &wbc_err)) {
 		return wbc_err;
 	}
 
diff --git a/source3/torture/torture.c b/source3/torture/torture.c
index e2d1497..19849a8 100644
--- a/source3/torture/torture.c
+++ b/source3/torture/torture.c
@@ -5613,11 +5613,11 @@ static bool run_local_memcache(int dummy)
 	return ret;
 }
 
-static void wbclient_done(struct async_req *req)
+static void wbclient_done(struct tevent_req *req)
 {
 	wbcErr wbc_err;
 	struct winbindd_response *wb_resp;
-	int *i = (int *)req->async.priv;
+	int *i = (int *)tevent_req_callback_data_void(req);
 
 	wbc_err = wb_trans_recv(req, req, &wb_resp);
 	TALLOC_FREE(req);
@@ -5654,14 +5654,13 @@ static bool run_local_wbclient(int dummy)
 			goto fail;
 		}
 		for (j=0; j<5; j++) {
-			struct async_req *req;
+			struct tevent_req *req;
 			req = wb_trans_send(ev, ev, wb_ctx[i],
 					    (j % 2) == 0, &wb_req);
 			if (req == NULL) {
 				goto fail;
 			}
-			req->async.fn = wbclient_done;
-			req->async.priv = &i;
+			tevent_req_set_callback(req, wbclient_done, &i);
 		}
 	}
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list