STEP01: librpc/rpc/dcerpc_connection.c do_request use_trans part1
authorStefan Metzmacher <metze@samba.org>
Sat, 11 Jan 2014 07:41:48 +0000 (08:41 +0100)
committerStefan Metzmacher <metze@samba.org>
Tue, 4 Jun 2019 10:45:39 +0000 (12:45 +0200)
librpc/rpc/dcerpc_connection.c

index 708fe5893a5c23d617437b709d103bc1b6778948..50242bf648ab00499d6719416a49961bd406fc53 100644 (file)
@@ -1537,10 +1537,14 @@ struct dcerpc_do_request_state {
 };
 
 struct dcerpc_do_request_out_frag {
+       struct tevent_context *ev;
+       struct dcerpc_connection *conn;
        struct tevent_req *req;
        DATA_BLOB blob;
        bool is_last;
        struct iovec vector;
+       struct tevent_req *subreq_wait1;
+       struct tevent_req *subreq_wait2;
 };
 
 static void dcerpc_do_request_cleanup(struct tevent_req *req,
@@ -1652,7 +1656,8 @@ static void dcerpc_do_request_out_frag_next(struct tevent_req *req,
        if (tevent_req_nomem(frag, req)) {
                return;
        }
-
+       frag->ev = state->ev;
+       frag->conn = state->conn;
        frag->req = req;
        state->out_frag = frag;
 
@@ -1747,9 +1752,9 @@ static void dcerpc_do_request_out_frag_next(struct tevent_req *req,
 
        frag->vector.iov_base = frag->blob.data;
        frag->vector.iov_len = frag->blob.length;
-       subreq = tstream_writev_queue_send(frag, state->ev,
-                                          state->conn->transport.stream,
-                                          state->conn->transport.write_queue,
+       subreq = tstream_writev_queue_send(frag, frag->ev,
+                                          frag->conn->transport.stream,
+                                          frag->conn->transport.write_queue,
                                           &frag->vector, 1);
        if (tevent_req_nomem(subreq, req)) {
                return;
@@ -1762,7 +1767,7 @@ static void dcerpc_do_request_out_frag_next(struct tevent_req *req,
                return;
        }
 
-       status = dcerpc_connection_loop_restart(state->conn, state->ev);
+       status = dcerpc_connection_loop_restart(frag->conn, frag->ev);
        if (tevent_req_nterror(req, status)) {
                return;
        }