libsmb: Make smb2cli_create cancellable
authorVolker Lendecke <vl@samba.org>
Fri, 20 Jun 2014 10:37:14 +0000 (10:37 +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>
libcli/smb/smb2cli_create.c

index 834a88146ce3a46ef012d2323677ce5b0205b7d8..bcd674e26a8af9ca4b03df679445ce6a73d75260 100644 (file)
@@ -31,9 +31,11 @@ struct smb2cli_create_state {
        uint64_t fid_volatile;
        struct smb_create_returns cr;
        struct smb2_create_blobs blobs;
+       struct tevent_req *subreq;
 };
 
 static void smb2cli_create_done(struct tevent_req *subreq);
+static bool smb2cli_create_cancel(struct tevent_req *req);
 
 struct tevent_req *smb2cli_create_send(
        TALLOC_CTX *mem_ctx,
@@ -159,9 +161,20 @@ struct tevent_req *smb2cli_create_send(
                return tevent_req_post(req, ev);
        }
        tevent_req_set_callback(subreq, smb2cli_create_done, req);
+
+       state->subreq = subreq;
+       tevent_req_set_cancel_fn(req, smb2cli_create_cancel);
+
        return req;
 }
 
+static bool smb2cli_create_cancel(struct tevent_req *req)
+{
+       struct smb2cli_create_state *state = tevent_req_data(req,
+               struct smb2cli_create_state);
+       return tevent_req_cancel(state->subreq);
+}
+
 static void smb2cli_create_done(struct tevent_req *subreq)
 {
        struct tevent_req *req =