diff options
author | Jeremy Allison <jra@samba.org> | 2000-04-27 23:28:56 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2000-04-27 23:28:56 +0000 |
commit | 4b60a33c6fa733060068e192b87c2e858103d6eb (patch) | |
tree | eb92df9b35af4898e580ddd5ac657ef07d4015d3 /source3/smbd | |
parent | 36db78fedad935aaa689d52d7f58e075f1f71812 (diff) | |
download | samba-4b60a33c6fa733060068e192b87c2e858103d6eb.tar.gz samba-4b60a33c6fa733060068e192b87c2e858103d6eb.tar.bz2 samba-4b60a33c6fa733060068e192b87c2e858103d6eb.zip |
Ok - this is more subtle than it looks :-).
When a file is being closed, once it passes the fnum and tid tests then
the locking context should be ignored when removing all locks. This is
what is done in the brl close case, but when you have outstanding
POSIX locks, then you cannot remove all the brl locks in one go, you
have to get the lock list and call do_unlock individually. As this
uses global_smbpid as the locking context, you need to make sure
that this is set correctly for the specific lock being removed. I
now do this by storing the smbpid in each entry in the unlock list returned from
the query call. I removed the smbpid from fsp (not needed) and
things seem ok (even with the stupid smbpid tricks that smbtorture plays :-).
Jeremy.
(This used to be commit 6baa96bb466915cc17e8cbad50254d6bd47b967b)
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/open.c | 4 | ||||
-rw-r--r-- | source3/smbd/process.c | 2 |
2 files changed, 1 insertions, 5 deletions
diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 92bba76619..737b9b5ef3 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -26,7 +26,6 @@ extern int DEBUGLEVEL; extern pstring sesssetup_user; extern uint16 global_oplock_port; extern BOOL global_client_failed_oplock_break; -extern int global_smbpid; /**************************************************************************** fd support routines - attempt to do a dos_open. @@ -165,7 +164,6 @@ static BOOL open_file(files_struct *fsp,connection_struct *conn, fsp->dev = sbuf.st_dev; GetTimeOfDay(&fsp->open_time); fsp->vuid = current_user.vuid; - fsp->smbpid = global_smbpid; fsp->size = 0; fsp->pos = -1; fsp->can_lock = True; @@ -799,7 +797,6 @@ files_struct *open_file_stat(connection_struct *conn, fsp->mode = 0; GetTimeOfDay(&fsp->open_time); fsp->vuid = current_user.vuid; - fsp->smbpid = global_smbpid; fsp->size = 0; fsp->pos = -1; fsp->can_lock = False; @@ -923,7 +920,6 @@ files_struct *open_directory(connection_struct *conn, fsp->mode = 0; GetTimeOfDay(&fsp->open_time); fsp->vuid = current_user.vuid; - fsp->smbpid = global_smbpid; fsp->size = 0; fsp->pos = -1; fsp->can_lock = True; diff --git a/source3/smbd/process.c b/source3/smbd/process.c index 77e6fc2aa7..f378550282 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -28,7 +28,6 @@ struct timeval smb_last_time; static char *InBuffer = NULL; char *OutBuffer = NULL; char *last_inbuf = NULL; -int global_smbpid; /* * Size of data we can send to client. Set @@ -419,6 +418,7 @@ static int switch_message(int type,char *inbuf,char *outbuf,int size,int bufsize static int num_smb_messages = sizeof(smb_messages) / sizeof(struct smb_message_struct); int match; + extern int global_smbpid; if (pid == (pid_t)-1) pid = getpid(); |