summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorRalph Boehme <slow@samba.org>2018-08-30 15:50:02 +0200
committerJeremy Allison <jra@samba.org>2018-08-31 22:22:23 +0200
commitb70b8503faded81b10859131f08486349876d132 (patch)
treeb07659d326bbd8942d39a029ddc2ea51ecde5021 /source3
parent5508024a861e7c85e6c837552ad142aa1d5e8eca (diff)
downloadsamba-b70b8503faded81b10859131f08486349876d132.tar.gz
s3:smbd: reorder tcon global record deletion and closing files of a tcon
As such, this doesn't change overall behaviour, but in case we ever add semantics acting on tcon record changes via an API like dbwrap_watch_send(), this will make a difference as it enforces ordering. Bug: https://bugzilla.samba.org/show_bug.cgi?id=13549 Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3')
-rw-r--r--source3/smbd/smbXsrv_tcon.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/source3/smbd/smbXsrv_tcon.c b/source3/smbd/smbXsrv_tcon.c
index eb483937d63..ded4010f5da 100644
--- a/source3/smbd/smbXsrv_tcon.c
+++ b/source3/smbd/smbXsrv_tcon.c
@@ -904,6 +904,25 @@ NTSTATUS smbXsrv_tcon_disconnect(struct smbXsrv_tcon *tcon, uint64_t vuid)
table = tcon->table;
tcon->table = NULL;
+ if (tcon->compat) {
+ bool ok;
+
+ ok = chdir_current_service(tcon->compat);
+ if (!ok) {
+ status = NT_STATUS_INTERNAL_ERROR;
+ DEBUG(0, ("smbXsrv_tcon_disconnect(0x%08x, '%s'): "
+ "chdir_current_service() failed: %s\n",
+ tcon->global->tcon_global_id,
+ tcon->global->share_name,
+ nt_errstr(status)));
+ tcon->compat = NULL;
+ return status;
+ }
+
+ close_cnum(tcon->compat, vuid);
+ tcon->compat = NULL;
+ }
+
tcon->status = NT_STATUS_NETWORK_NAME_DELETED;
global_rec = tcon->global->db_rec;
@@ -966,25 +985,6 @@ NTSTATUS smbXsrv_tcon_disconnect(struct smbXsrv_tcon *tcon, uint64_t vuid)
}
tcon->db_rec = NULL;
- if (tcon->compat) {
- bool ok;
-
- ok = chdir_current_service(tcon->compat);
- if (!ok) {
- status = NT_STATUS_INTERNAL_ERROR;
- DEBUG(0, ("smbXsrv_tcon_disconnect(0x%08x, '%s'): "
- "chdir_current_service() failed: %s\n",
- tcon->global->tcon_global_id,
- tcon->global->share_name,
- nt_errstr(status)));
- tcon->compat = NULL;
- return status;
- }
-
- close_cnum(tcon->compat, vuid);
- tcon->compat = NULL;
- }
-
return error;
}