return NT_STATUS_OK;
}
+static bool smbd_smb2_create_cancel(struct tevent_req *req);
static void smbd_smb2_create_schedule_redispatch(struct tevent_req *req);
static void smbd_smb2_create_before_exec(struct tevent_req *req);
static void smbd_smb2_create_after_exec(struct tevent_req *req);
TALLOC_FREE(smb2req->subreq);
smb2req->subreq = req;
+ /* allow this request to be canceled */
+ tevent_req_set_cancel_fn(req, smbd_smb2_create_cancel);
+
if (lp_fake_oplocks(SNUM(smb2req->tcon->compat))) {
state->requested_oplock_level = SMB2_OPLOCK_LEVEL_NONE;
} else {
static bool smbd_smb2_create_cancel(struct tevent_req *req)
{
- struct smbd_smb2_request *smb2req = NULL;
struct smbd_smb2_create_state *state = tevent_req_data(req,
struct smbd_smb2_create_state);
- uint64_t mid;
-
- if (!state) {
- return false;
- }
- if (!state->smb2req) {
- return false;
- }
+ if (state->open_rec != NULL) {
+ struct smbd_smb2_request *smb2req = state->smb2req;
+ uint64_t mid = get_mid_from_smb2req(smb2req);
- smb2req = state->smb2req;
- mid = get_mid_from_smb2req(smb2req);
+ if (is_deferred_open_async(state->open_rec)) {
+ /* Can't cancel an async create. */
+ return false;
+ }
- if (is_deferred_open_async(state->open_rec)) {
- /* Can't cancel an async create. */
- return false;
+ remove_deferred_open_message_smb2_internal(smb2req, mid);
}
- remove_deferred_open_message_smb2_internal(smb2req, mid);
-
- tevent_req_defer_callback(req, smb2req->sconn->ev_ctx);
+ tevent_req_defer_callback(req, state->ev);
tevent_req_nterror(req, NT_STATUS_CANCELLED);
return true;
}
state->open_was_deferred = true;
- /* allow this request to be canceled */
- tevent_req_set_cancel_fn(req, smbd_smb2_create_cancel);
-
return true;
}