summaryrefslogtreecommitdiff
path: root/source3/locking/locking.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2000-04-27 22:23:04 +0000
committerJeremy Allison <jra@samba.org>2000-04-27 22:23:04 +0000
commit36db78fedad935aaa689d52d7f58e075f1f71812 (patch)
tree24811c595378d882fd0737203667cfe468d199c5 /source3/locking/locking.c
parent3d3c50326ba7f32ebb2fc683a3410dc0d1f18cdc (diff)
downloadsamba-36db78fedad935aaa689d52d7f58e075f1f71812.tar.gz
samba-36db78fedad935aaa689d52d7f58e075f1f71812.tar.bz2
samba-36db78fedad935aaa689d52d7f58e075f1f71812.zip
Fixed subtle unlocking bug when a file is closed. We need to store the
smbpid used when a file was opened in the files_struct. Else we use the wrong global_smbpid when we are closing the file and trying to remove the brl locks - this causes the brl locks to be left when the file is closed as the samba_context check fails. Jeremy. (This used to be commit 2746e5602e493e5b022764b4b839eb4d2f14363b)
Diffstat (limited to 'source3/locking/locking.c')
-rw-r--r--source3/locking/locking.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/source3/locking/locking.c b/source3/locking/locking.c
index 9d407bf16b..b6b34138e3 100644
--- a/source3/locking/locking.c
+++ b/source3/locking/locking.c
@@ -41,8 +41,6 @@ extern int DEBUGLEVEL;
/* the locking database handle */
static TDB_CONTEXT *tdb;
-int global_smbpid;
-
/*
* Doubly linked list to hold pending closes needed for
* POSIX locks. This may be changed to use a hash table (as
@@ -569,7 +567,7 @@ BOOL is_locked(files_struct *fsp,connection_struct *conn,
return(False);
ret = !brl_locktest(fsp->dev, fsp->inode,
- global_smbpid, getpid(), conn->cnum,
+ fsp->smbpid, getpid(), conn->cnum,
offset, count, lock_type);
/*
@@ -607,7 +605,7 @@ BOOL do_lock(files_struct *fsp,connection_struct *conn,
if (OPEN_FSP(fsp) && fsp->can_lock && (fsp->conn == conn)) {
ok = brl_lock(fsp->dev, fsp->inode, fsp->fnum,
- global_smbpid, getpid(), conn->cnum,
+ fsp->smbpid, getpid(), conn->cnum,
offset, count,
lock_type);
@@ -627,7 +625,7 @@ BOOL do_lock(files_struct *fsp,connection_struct *conn,
* lock entry.
*/
(void)brl_unlock(fsp->dev, fsp->inode, fsp->fnum,
- global_smbpid, getpid(), conn->cnum,
+ fsp->smbpid, getpid(), conn->cnum,
offset, count);
}
}
@@ -676,9 +674,10 @@ BOOL do_unlock(files_struct *fsp,connection_struct *conn,
pid = getpid();
ok = brl_unlock(fsp->dev, fsp->inode, fsp->fnum,
- global_smbpid, pid, conn->cnum, offset, count);
+ fsp->smbpid, pid, conn->cnum, offset, count);
if (!ok) {
+ DEBUG(10,("do_unlock: returning ERRlock.\n" ));
*eclass = ERRDOS;
*ecode = ERRlock;
return False;