diff options
author | Jeremy Allison <jra@samba.org> | 2003-02-22 01:09:42 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2003-02-22 01:09:42 +0000 |
commit | b362cc241b829f585a96b5d285ed12db50b21e2e (patch) | |
tree | c88dc076038426f21bd4ad16f2ab5b67f9219bce /source/locking | |
parent | caf298c3808cbdd683e884b32b7a0538505a3066 (diff) | |
download | samba-b362cc241b829f585a96b5d285ed12db50b21e2e.tar.gz |
When checking is_locked() new WRITE locks conflict with existing READ locks even
if the context is the same. See LOCKTEST7 in smbtorture.
Jeremy.
Diffstat (limited to 'source/locking')
-rw-r--r-- | source/locking/brlock.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/source/locking/brlock.c b/source/locking/brlock.c index 8c22f7d7ab2..9902c7bbd7b 100644 --- a/source/locking/brlock.c +++ b/source/locking/brlock.c @@ -151,9 +151,16 @@ static BOOL brl_conflict_other(struct lock_struct *lck1, struct lock_struct *lck if (lck1->lock_type == READ_LOCK && lck2->lock_type == READ_LOCK) return False; - if (brl_same_context(&lck1->context, &lck2->context) && - lck1->fnum == lck2->fnum) - return False; + /* + * Incoming WRITE locks conflict with existing READ locks even + * if the context is the same. JRA. See LOCKTEST7 in smbtorture. + */ + + if (!(lck2->lock_type == WRITE_LOCK && lck1->lock_type == READ_LOCK)) { + if (brl_same_context(&lck1->context, &lck2->context) && + lck1->fnum == lck2->fnum) + return False; + } if (lck1->start >= (lck2->start + lck2->size) || lck2->start >= (lck1->start + lck1->size)) return False; |