summaryrefslogtreecommitdiff
path: root/source3/smbd/smb2_server.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2015-11-02 13:40:24 +0100
committerJeremy Allison <jra@samba.org>2015-11-03 00:12:24 +0100
commitad85c8905184d125a2a38569f7955ccbf443ebcd (patch)
treec7f43698eb379c588caa377b079c4a02939bcb0f /source3/smbd/smb2_server.c
parentd66863b1fff862aa2ae21a06116bc2a2b2f7a6ce (diff)
downloadsamba-ad85c8905184d125a2a38569f7955ccbf443ebcd.tar.gz
s3:smb2_server: make the logic of SMB2_CANCEL DLIST_REMOVE() clearer
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11581 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/smbd/smb2_server.c')
-rw-r--r--source3/smbd/smb2_server.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index 2692fb8d112..cdcead0dbce 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -1705,6 +1705,14 @@ static NTSTATUS smbd_smb2_request_process_cancel(struct smbd_smb2_request *req)
search_message_id = BVAL(inhdr, SMB2_HDR_MESSAGE_ID);
search_async_id = BVAL(inhdr, SMB2_HDR_PID);
+ /*
+ * We don't need the request anymore cancel requests never
+ * have a response.
+ *
+ * We defer the TALLOC_FREE(req) to the caller.
+ */
+ DLIST_REMOVE(xconn->smb2.requests, req);
+
for (cur = xconn->smb2.requests; cur; cur = cur->next) {
const uint8_t *outhdr;
uint64_t message_id;
@@ -2365,8 +2373,10 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
/*
* We don't need the request anymore cancel requests never
* have a response.
+ *
+ * smbd_smb2_request_process_cancel() already called
+ * DLIST_REMOVE(xconn->smb2.requests, req);
*/
- DLIST_REMOVE(xconn->smb2.requests, req);
TALLOC_FREE(req);
break;