From bb6b31dd866b0a06e2026f072db8c61a8a986ab6 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 20 Jun 2014 10:38:10 +0000 Subject: [PATCH] libsmb: Make cli_ntcreate1 cancellable Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- source3/libsmb/clifile.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c index 3ec5e9aafb1..2ee6eda956f 100644 --- a/source3/libsmb/clifile.c +++ b/source3/libsmb/clifile.c @@ -1796,9 +1796,11 @@ struct cli_ntcreate1_state { uint16_t vwv[24]; uint16_t fnum; struct smb_create_returns cr; + struct tevent_req *subreq; }; static void cli_ntcreate1_done(struct tevent_req *subreq); +static bool cli_ntcreate1_cancel(struct tevent_req *req); static struct tevent_req *cli_ntcreate1_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, @@ -1866,6 +1868,10 @@ static struct tevent_req *cli_ntcreate1_send(TALLOC_CTX *mem_ctx, return tevent_req_post(req, ev); } tevent_req_set_callback(subreq, cli_ntcreate1_done, req); + + state->subreq = subreq; + tevent_req_set_cancel_fn(req, cli_ntcreate1_cancel); + return req; } @@ -1901,6 +1907,13 @@ static void cli_ntcreate1_done(struct tevent_req *subreq) tevent_req_done(req); } +static bool cli_ntcreate1_cancel(struct tevent_req *req) +{ + struct cli_ntcreate1_state *state = tevent_req_data( + req, struct cli_ntcreate1_state); + return tevent_req_cancel(state->subreq); +} + static NTSTATUS cli_ntcreate1_recv(struct tevent_req *req, uint16_t *pfnum, struct smb_create_returns *cr) -- 2.11.4.GIT