Revert "s4:librpc: Allow to cancel queued requests"
authorStefan Metzmacher <metze@samba.org>
Wed, 10 Jan 2024 16:04:15 +0000 (17:04 +0100)
committerStefan Metzmacher <metze@samba.org>
Thu, 8 Feb 2024 15:39:21 +0000 (16:39 +0100)
This reverts commit 9432cce1f2195b1c1c2938066b5274f99131d922.

source4/librpc/rpc/dcerpc.c

index 6c5d0ba5980279e71480bdd76315260e6f1d41e6..802759c72b2022bee6782755c533433de3a3e52f 100644 (file)
@@ -83,7 +83,6 @@ _PUBLIC_ NTSTATUS dcerpc_init(void)
 
 static void dcerpc_connection_dead(struct dcecli_connection *conn, NTSTATUS status);
 static void dcerpc_schedule_io_trigger(struct dcecli_connection *c);
-static int dcerpc_req_dequeue(struct rpc_request *req);
 
 static struct rpc_request *dcerpc_request_send(TALLOC_CTX *mem_ctx,
                                               struct dcerpc_pipe *p,
@@ -238,11 +237,9 @@ struct dcerpc_bh_raw_call_state {
        DATA_BLOB in_data;
        DATA_BLOB out_data;
        uint32_t out_flags;
-       struct rpc_request *subreq;
 };
 
 static void dcerpc_bh_raw_call_done(struct rpc_request *subreq);
-static bool dcerpc_bh_raw_call_cancel(struct tevent_req *req);
 
 static struct tevent_req *dcerpc_bh_raw_call_send(TALLOC_CTX *mem_ctx,
                                                  struct tevent_context *ev,
@@ -258,6 +255,7 @@ static struct tevent_req *dcerpc_bh_raw_call_send(TALLOC_CTX *mem_ctx,
        struct tevent_req *req;
        struct dcerpc_bh_raw_call_state *state;
        bool ok;
+       struct rpc_request *subreq;
 
        req = tevent_req_create(mem_ctx, &state,
                                struct dcerpc_bh_raw_call_state);
@@ -275,64 +273,20 @@ static struct tevent_req *dcerpc_bh_raw_call_send(TALLOC_CTX *mem_ctx,
                return tevent_req_post(req, ev);
        }
 
-       state->subreq = dcerpc_request_send(state,
-                                           hs->p,
-                                           object,
-                                           opnum,
-                                           &state->in_data);
-       if (tevent_req_nomem(state->subreq, req)) {
+       subreq = dcerpc_request_send(state,
+                                    hs->p,
+                                    object,
+                                    opnum,
+                                    &state->in_data);
+       if (tevent_req_nomem(subreq, req)) {
                return tevent_req_post(req, ev);
        }
-       state->subreq->async.callback = dcerpc_bh_raw_call_done;
-       state->subreq->async.private_data = req;
-
-       tevent_req_set_cancel_fn(req, dcerpc_bh_raw_call_cancel);
+       subreq->async.callback = dcerpc_bh_raw_call_done;
+       subreq->async.private_data = req;
 
        return req;
 }
 
-static bool dcerpc_bh_raw_call_cancel(struct tevent_req *req)
-{
-       struct dcerpc_bh_raw_call_state *state = tevent_req_data(
-               req, struct dcerpc_bh_raw_call_state);
-       struct rpc_request *subreq = state->subreq;
-
-       switch (subreq->state) {
-       case RPC_REQUEST_DONE:
-               /* Can't cancel a complete request */
-               return false;
-       case RPC_REQUEST_PENDING:
-       {
-               /* TODO Send CO_CANCEL PDU */
-               return false;
-       }
-       case RPC_REQUEST_QUEUED:
-       {
-               /*
-                * If still queued, just remove from queue and call
-                * its callback
-                */
-               dcerpc_req_dequeue(subreq);
-               subreq->payload = data_blob_null;
-               subreq->state = RPC_REQUEST_DONE;
-               subreq->status = NT_STATUS_RPC_CALL_CANCELLED;
-
-               /*
-                * We have to look at shipping further requests before calling
-                * the async function, that one might close the pipe
-                */
-               dcerpc_schedule_io_trigger(subreq->p->conn);
-
-               if (subreq->async.callback) {
-                       subreq->async.callback(subreq);
-               }
-               return true;
-       }
-       }
-
-       return false;
-}
-
 static void dcerpc_bh_raw_call_done(struct rpc_request *subreq)
 {
        struct tevent_req *req =