s3:files: factor fsp_free() out of file_free()
authorMichael Adam <obnox@samba.org>
Thu, 7 Jun 2012 14:31:14 +0000 (16:31 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 15 Jun 2012 01:28:13 +0000 (03:28 +0200)
To be reused in the durable reconnect code.

Pair-Programmed-With: Volker Lendecke <vl@samba.org>

source3/smbd/files.c
source3/smbd/proto.h

index c3a7465feb71403ee8919de183dbc29f59c4387d..12ec04cd3b0bec96eafb2ac7763d3ccb35acce81 100644 (file)
@@ -499,6 +499,32 @@ void file_sync_all(connection_struct *conn)
  Free up a fsp.
 ****************************************************************************/
 
+void fsp_free(files_struct *fsp)
+{
+       struct smbd_server_connection *sconn = fsp->conn->sconn;
+
+       DLIST_REMOVE(sconn->files, fsp);
+       SMB_ASSERT(sconn->num_files > 0);
+       sconn->num_files--;
+
+       TALLOC_FREE(fsp->fake_file_handle);
+
+       if (fsp->fh->ref_count == 1) {
+               TALLOC_FREE(fsp->fh);
+       } else {
+               fsp->fh->ref_count--;
+       }
+
+       fsp->conn->num_files_open--;
+
+       /* this is paranoia, just in case someone tries to reuse the
+          information */
+       ZERO_STRUCTP(fsp);
+
+       /* fsp->fsp_name is a talloc child and is free'd automatically. */
+       TALLOC_FREE(fsp);
+}
+
 void file_free(struct smb_request *req, files_struct *fsp)
 {
        struct smbd_server_connection *sconn = fsp->conn->sconn;
@@ -538,26 +564,7 @@ void file_free(struct smb_request *req, files_struct *fsp)
        /* Drop all remaining extensions. */
        vfs_remove_all_fsp_extensions(fsp);
 
-       DLIST_REMOVE(sconn->files, fsp);
-       SMB_ASSERT(sconn->num_files > 0);
-       sconn->num_files--;
-
-       TALLOC_FREE(fsp->fake_file_handle);
-
-       if (fsp->fh->ref_count == 1) {
-               TALLOC_FREE(fsp->fh);
-       } else {
-               fsp->fh->ref_count--;
-       }
-
-       fsp->conn->num_files_open--;
-
-       /* this is paranoia, just in case someone tries to reuse the
-          information */
-       ZERO_STRUCTP(fsp);
-
-       /* fsp->fsp_name is a talloc child and is free'd automatically. */
-       TALLOC_FREE(fsp);
+       fsp_free(fsp);
 
        DEBUG(5,("freed files structure %d (%u used)\n",
                 fnum, (unsigned int)sconn->num_files));
index 7f341363f160b9dcd216cf6c6528d2b8856c75c4..4d035179c5ebde1c1c507a6c03716838b142baaf 100644 (file)
@@ -387,6 +387,7 @@ files_struct *file_find_di_first(struct smbd_server_connection *sconn,
 files_struct *file_find_di_next(files_struct *start_fsp);
 bool file_find_subpath(files_struct *dir_fsp);
 void file_sync_all(connection_struct *conn);
+void fsp_free(files_struct *fsp);
 void file_free(struct smb_request *req, files_struct *fsp);
 files_struct *file_fsp(struct smb_request *req, uint16 fid);
 uint64_t fsp_persistent_id(const struct files_struct *fsp);