s3:files: reorder file_free() a bit
authorMichael Adam <obnox@samba.org>
Thu, 7 Jun 2012 14:27:24 +0000 (16:27 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 15 Jun 2012 01:28:13 +0000 (03:28 +0200)
Pair-Programmed-With: Volker Lendecke <vl@samba.org>
Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>

source3/smbd/files.c

index 25749c2714bcf46381a10eb8ac06dfba4039c9b3..c3a7465feb71403ee8919de183dbc29f59c4387d 100644 (file)
@@ -502,18 +502,7 @@ void file_sync_all(connection_struct *conn)
 void file_free(struct smb_request *req, 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--;
-       }
+       int fnum = fsp->fnum;
 
        if (fsp->notify) {
                struct notify_context *notify_ctx =
@@ -528,10 +517,6 @@ void file_free(struct smb_request *req, files_struct *fsp)
        if (sconn->file_bmap != NULL) {
                bitmap_clear(sconn->file_bmap, fsp->fnum - FILE_HANDLE_OFFSET);
        }
-       DEBUG(5,("freed files structure %d (%u used)\n",
-                fsp->fnum, (unsigned int)sconn->num_files));
-
-       fsp->conn->num_files_open--;
 
        if ((req != NULL) && (fsp == req->chain_fsp)) {
                req->chain_fsp = NULL;
@@ -553,12 +538,29 @@ 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);
+
+       DEBUG(5,("freed files structure %d (%u used)\n",
+                fnum, (unsigned int)sconn->num_files));
 }
 
 /****************************************************************************