diff options
Diffstat (limited to 'source3/smbd/open.c')
-rw-r--r-- | source3/smbd/open.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 467a69f049..c2bf8edb7a 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -1685,6 +1685,17 @@ void remove_deferred_open_entry(struct file_id id, uint64_t mid, } /**************************************************************************** + Return true if this is a state pointer to an asynchronous create. +****************************************************************************/ + +bool is_deferred_open_async(const void *ptr) +{ + const struct deferred_open_record *state = (const struct deferred_open_record *)ptr; + + return state->async_open; +} + +/**************************************************************************** Open a file with a share mode. Passed in an already created files_struct *. ****************************************************************************/ @@ -1788,18 +1799,18 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn, if (get_deferred_open_message_state(req, &request_time, &ptr)) { - - struct deferred_open_record *state = (struct deferred_open_record *)ptr; /* Remember the absolute time of the original request with this mid. We'll use it later to see if this has timed out. */ /* If it was an async create retry, the file didn't exist. */ - if (state->async_open) { + + if (is_deferred_open_async(ptr)) { SET_STAT_INVALID(smb_fname->st); file_existed = false; } else { + struct deferred_open_record *state = (struct deferred_open_record *)ptr; /* Remove the deferred open entry under lock. */ remove_deferred_open_entry( state->id, req->mid, |