s3:smbd: add a comment stating that file_close_user() is redundant for SMB2
[nivanova/samba-autobuild/.git] / source3 / smbd / smbXsrv_session.c
index 557a43f2f8c38882c02f63f74244826c65e56722..19f4bc05600b507f88597b8084c5b4a32f838297 100644 (file)
@@ -89,7 +89,7 @@ NTSTATUS smbXsrv_session_global_init(struct messaging_context *msg_ctx)
                return status;
        }
 
-       db_ctx = db_open_watched(NULL, backend, server_messaging_context());
+       db_ctx = db_open_watched(NULL, &backend, server_messaging_context());
        if (db_ctx == NULL) {
                TALLOC_FREE(backend);
                return NT_STATUS_NO_MEMORY;
@@ -1663,6 +1663,35 @@ NTSTATUS smbXsrv_session_logoff(struct smbXsrv_session *session)
        session->client = NULL;
        session->status = NT_STATUS_USER_SESSION_DELETED;
 
+       if (session->compat) {
+               /*
+                * For SMB2 this is a bit redundant as files are also close
+                * below via smb2srv_tcon_disconnect_all() -> ... ->
+                * smbXsrv_tcon_disconnect() -> close_cnum() ->
+                * file_close_conn().
+                */
+               file_close_user(sconn, session->compat->vuid);
+       }
+
+       if (session->tcon_table != NULL) {
+               /*
+                * Note: We only have a tcon_table for SMB2.
+                */
+               status = smb2srv_tcon_disconnect_all(session);
+               if (!NT_STATUS_IS_OK(status)) {
+                       DEBUG(0, ("smbXsrv_session_logoff(0x%08x): "
+                                 "smb2srv_tcon_disconnect_all() failed: %s\n",
+                                 session->global->session_global_id,
+                                 nt_errstr(status)));
+                       error = status;
+               }
+       }
+
+       if (session->compat) {
+               invalidate_vuid(sconn, session->compat->vuid);
+               session->compat = NULL;
+       }
+
        global_rec = session->global->db_rec;
        session->global->db_rec = NULL;
        if (global_rec == NULL) {
@@ -1722,29 +1751,6 @@ NTSTATUS smbXsrv_session_logoff(struct smbXsrv_session *session)
        }
        session->db_rec = NULL;
 
-       if (session->compat) {
-               file_close_user(sconn, session->compat->vuid);
-       }
-
-       if (session->tcon_table != NULL) {
-               /*
-                * Note: We only have a tcon_table for SMB2.
-                */
-               status = smb2srv_tcon_disconnect_all(session);
-               if (!NT_STATUS_IS_OK(status)) {
-                       DEBUG(0, ("smbXsrv_session_logoff(0x%08x): "
-                                 "smb2srv_tcon_disconnect_all() failed: %s\n",
-                                 session->global->session_global_id,
-                                 nt_errstr(status)));
-                       error = status;
-               }
-       }
-
-       if (session->compat) {
-               invalidate_vuid(sconn, session->compat->vuid);
-               session->compat = NULL;
-       }
-
        return error;
 }