]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: Move the call to file_free() out of close_directory()
authorVolker Lendecke <vl@samba.org>
Tue, 1 Feb 2022 16:14:34 +0000 (17:14 +0100)
committerJeremy Allison <jra@samba.org>
Thu, 10 Feb 2022 18:16:36 +0000 (18:16 +0000)
Call file_free() just once

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/close.c

index 8abd3fb3861707d18c56e6d36b669e1aa4b14102..cd406f08beec9ecf1c88c6c054dcef1812a41bed 100644 (file)
@@ -1379,7 +1379,6 @@ static NTSTATUS close_directory(struct smb_request *req, files_struct *fsp,
        if (lck == NULL) {
                DEBUG(0, ("close_directory: Could not get share mode lock for "
                          "%s\n", fsp_str_dbg(fsp)));
-               file_free(req, fsp);
                return NT_STATUS_INVALID_PARAMETER;
        }
 
@@ -1429,7 +1428,6 @@ static NTSTATUS close_directory(struct smb_request *req, files_struct *fsp,
                        if (!NT_STATUS_IS_OK(status)) {
                                DEBUG(5, ("delete_all_streams failed: %s\n",
                                          nt_errstr(status)));
-                               file_free(req, fsp);
                                /* unbecome user. */
                                pop_sec_ctx();
                                return status;
@@ -1472,11 +1470,6 @@ static NTSTATUS close_directory(struct smb_request *req, files_struct *fsp,
                          strerror(errno)));
        }
 
-       /*
-        * Do the code common to files and directories.
-        */
-       file_free(req, fsp);
-
        if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(status1)) {
                status = status1;
        }
@@ -1562,6 +1555,7 @@ NTSTATUS close_file(struct smb_request *req, files_struct *fsp,
                status = NT_STATUS_OK;
        } else if (fsp->fsp_flags.is_directory) {
                status = close_directory(req, fsp, close_type);
+               file_free(req, fsp);
        } else {
                status = close_normal_file(req, fsp, close_type);
        }