summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2009-07-21 16:23:35 +0930
committerMichael Adam <obnox@samba.org>2009-07-21 10:21:53 +0200
commit760104188d0d2ed96ec4a70138e6d0bf86d797ed (patch)
treef45dc8d354f671364c9451cb4ce1a437cef540b3
parent8e04c69e027260e7e1f0a4cf3e58e31ed4084d8b (diff)
downloadsamba-760104188d0d2ed96ec4a70138e6d0bf86d797ed.tar.gz
samba-760104188d0d2ed96ec4a70138e6d0bf86d797ed.tar.bz2
samba-760104188d0d2ed96ec4a70138e6d0bf86d797ed.zip
tdb: fix locking error
54a51839ea65aa788b18fce8de0ae4f9ba63e4e7 "Make tdb transaction lock recursive (samba version)" was broken: I "cleaned it up" and prevented it from ever unlocking. To see the problem: $ bin/tdbtorture -s 1248142523 tdb_brlock failed (fd=3) at offset 8 rw_type=1 lck_type=14 len=1 tdb_transaction_lock: failed to get transaction lock tdb_transaction_start failed: Resource deadlock avoided My testcase relied on the *count* being correct, which it was. Fixing that now. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Michael Adam <obnox@samba.org>
-rw-r--r--lib/tdb/common/lock.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/tdb/common/lock.c b/lib/tdb/common/lock.c
index d812fbfdc5..2c72ae1f0d 100644
--- a/lib/tdb/common/lock.c
+++ b/lib/tdb/common/lock.c
@@ -328,7 +328,7 @@ int tdb_transaction_unlock(struct tdb_context *tdb)
if (tdb->global_lock.count) {
return 0;
}
- if (tdb->transaction_lock_count > 0) {
+ if (tdb->transaction_lock_count > 1) {
tdb->transaction_lock_count--;
return 0;
}