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>
Mon, 11 Jun 2012 07:38:37 +0000 (09:38 +0200)
Pair-Programmed-With: Volker Lendecke <vl@samba.org>

source3/smbd/files.c

index f6ecd84720ee52870824b9b7e7560be4a2771dc9..c88c7512a413d497d512c9f28bd9145140aa123a 100644 (file)
@@ -462,18 +462,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 =
@@ -487,11 +476,6 @@ void file_free(struct smb_request *req, files_struct *fsp)
 
        TALLOC_FREE(fsp->smbXsrv);
 
-       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;
        }
@@ -512,12 +496,30 @@ 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));
+
 }
 
 /****************************************************************************