libsmb: Make cli_ntcreate1 cancellable
authorVolker Lendecke <vl@samba.org>
Fri, 20 Jun 2014 10:38:10 +0000 (10:38 +0000)
committerVolker Lendecke <vl@samba.org>
Sat, 21 Jun 2014 18:38:11 +0000 (20:38 +0200)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/libsmb/clifile.c

index 3ec5e9aafb1c07177f2a9ea0ec725238a247bd75..2ee6eda956f8d41cf070227b8244bb0011aa16c4 100644 (file)
@@ -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)