summaryrefslogtreecommitdiff
path: root/source3/smbd/open.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2010-04-23 13:10:15 -0700
committerJeremy Allison <jra@samba.org>2010-04-23 13:10:15 -0700
commit2bbb8c917e372ceeb1e144259d9d2b0eab7cc212 (patch)
treef9cbf789caf28cf2cbd3506e82b575f9ac4af2d8 /source3/smbd/open.c
parentdd2025947136f28b22b70de59309e149a1f45f3d (diff)
downloadsamba-2bbb8c917e372ceeb1e144259d9d2b0eab7cc212.tar.gz
samba-2bbb8c917e372ceeb1e144259d9d2b0eab7cc212.tar.bz2
samba-2bbb8c917e372ceeb1e144259d9d2b0eab7cc212.zip
Allow smb2 create requests to be cancelled.
Jeremy.
Diffstat (limited to 'source3/smbd/open.c')
-rw-r--r--source3/smbd/open.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index e0c24dab8d..f49aca8429 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -1085,7 +1085,7 @@ static void defer_open(struct share_mode_lock *lck,
(unsigned long long)req->mid));
if (!push_deferred_open_message_smb(req, request_time, timeout,
- (char *)state, sizeof(*state))) {
+ state->id, (char *)state, sizeof(*state))) {
exit_server("push_deferred_open_message_smb failed");
}
add_deferred_open(lck, req->mid, request_time, state->id);
@@ -1449,6 +1449,22 @@ static NTSTATUS calculate_access_mask(connection_struct *conn,
}
/****************************************************************************
+ Remove the deferred open entry under lock.
+****************************************************************************/
+
+void remove_deferred_open_entry(struct file_id id, uint64_t mid)
+{
+ struct share_mode_lock *lck = get_share_mode_lock(talloc_tos(), id,
+ NULL, NULL, NULL);
+ if (lck == NULL) {
+ DEBUG(0, ("could not get share mode lock\n"));
+ } else {
+ del_deferred_open_entry(lck, mid);
+ TALLOC_FREE(lck);
+ }
+}
+
+/****************************************************************************
Open a file with a share mode. Passed in an already created files_struct *.
****************************************************************************/
@@ -1556,14 +1572,7 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
see if this has timed out. */
/* Remove the deferred open entry under lock. */
- lck = get_share_mode_lock(talloc_tos(), state->id,
- NULL, NULL, NULL);
- if (lck == NULL) {
- DEBUG(0, ("could not get share mode lock\n"));
- } else {
- del_deferred_open_entry(lck, req->mid);
- TALLOC_FREE(lck);
- }
+ remove_deferred_open_entry(state->id, req->mid);
/* Ensure we don't reprocess this message. */
remove_deferred_open_message_smb(req->mid);