s3:rpc_client: let rpc_transport_tstream_init() create read and write queue
authorStefan Metzmacher <metze@samba.org>
Tue, 22 Jun 2010 22:01:45 +0000 (18:01 -0400)
committerStefan Metzmacher <metze@samba.org>
Wed, 15 Dec 2010 14:26:05 +0000 (15:26 +0100)
metze

source3/include/proto.h
source3/rpc_client/rpc_transport_tstream.c
source3/rpc_server/rpc_ncacn_np.c

index 0f02dfbecf6a531b1479d8c01717582a3628b718..9b41321df6c6ad6af50f99961a7fbc2aa73652fc 100644 (file)
@@ -4244,10 +4244,8 @@ NTSTATUS rpc_transport_sock_init(TALLOC_CTX *mem_ctx, int fd,
 
 /* The following definitions come from rpc_client/rpc_transport_tstream.c  */
 NTSTATUS rpc_transport_tstream_init(TALLOC_CTX *mem_ctx,
-                               struct tstream_context *npipe,
-                               struct tevent_queue *read_queue,
-                               struct tevent_queue *write_queue,
-                                struct rpc_cli_transport **presult);
+                               struct tstream_context **stream,
+                               struct rpc_cli_transport **presult);
 
 /* The following definitions come from rpc_server/srv_eventlog_nt.c  */
 
index c62540cb3f83f05ad3cf44fcc33036b351ff1b75..e05498b1a2ff59dc84810d02ee9912fa9fe9cf53 100644 (file)
@@ -316,17 +316,13 @@ static NTSTATUS rpc_tstream_write_recv(struct tevent_req *req, ssize_t *sent)
 *
 * @param mem_ctx       - memory context used to allocate the transport
 * @param stream                - a ready to use tstream
-* @param read_queue    - pre-createted tstream read queue
-* @param write_queue   - pre-createted tstream write queue
 * @param presult       - the transport structure
 *
 * @return              - a NT Status error code.
 */
 NTSTATUS rpc_transport_tstream_init(TALLOC_CTX *mem_ctx,
-                               struct tstream_context *stream,
-                               struct tevent_queue *read_queue,
-                               struct tevent_queue *write_queue,
-                                struct rpc_cli_transport **presult)
+                               struct tstream_context **stream,
+                               struct rpc_cli_transport **presult)
 {
        struct rpc_cli_transport *result;
        struct rpc_tstream_state *state;
@@ -342,9 +338,18 @@ NTSTATUS rpc_transport_tstream_init(TALLOC_CTX *mem_ctx,
        }
        result->priv = state;
 
-       state->stream = talloc_steal(state, stream);
-       state->read_queue = talloc_steal(state, read_queue);
-       state->write_queue = talloc_steal(state, write_queue);
+       state->read_queue = tevent_queue_create(state, "read_queue");
+       if (state->read_queue == NULL) {
+               TALLOC_FREE(result);
+               return NT_STATUS_NO_MEMORY;
+       }
+       state->write_queue = tevent_queue_create(state, "write_queue");
+       if (state->write_queue == NULL) {
+               TALLOC_FREE(result);
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       state->stream = talloc_move(state, stream);
        state->timeout = 10000; /* 10 seconds. */
 
        result->trans_send = NULL;
index f4c47fc3e32dc9cf8c9a929636992ba97fd03281..71ac69fe15308ed125240a5f77cc05a85dbe86e4 100644 (file)
@@ -606,18 +606,6 @@ struct np_proxy_state *make_external_rpc_pipe_p(TALLOC_CTX *mem_ctx,
                return NULL;
        }
 
-       result->read_queue = tevent_queue_create(result, "np_read");
-       if (result->read_queue == NULL) {
-               DEBUG(0, ("tevent_queue_create failed\n"));
-               goto fail;
-       }
-
-       result->write_queue = tevent_queue_create(result, "np_write");
-       if (result->write_queue == NULL) {
-               DEBUG(0, ("tevent_queue_create failed\n"));
-               goto fail;
-       }
-
        ev = s3_tevent_context_init(talloc_tos());
        if (ev == NULL) {
                DEBUG(0, ("s3_tevent_context_init failed\n"));
@@ -756,9 +744,7 @@ static NTSTATUS rpc_pipe_open_external(TALLOC_CTX *mem_ctx,
        result->max_recv_frag = RPC_MAX_PDU_FRAG_LEN;
 
        status = rpc_transport_tstream_init(result,
-                                           proxy_state->npipe,
-                                           proxy_state->read_queue,
-                                           proxy_state->write_queue,
+                                           &proxy_state->npipe,
                                            &result->transport);
        if (!NT_STATUS_IS_OK(status)) {
                goto done;