From: Rusty Russell Date: Mon, 22 Feb 2010 03:03:53 +0000 (+1030) Subject: tdb: don't suppress the transaction lock because of the allrecord lock. X-Git-Url: https://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=57c618f35d2aa244d444670c63a21e7a677c63c2 tdb: don't suppress the transaction lock because of the allrecord lock. tdb_transaction_lock() and tdb_transaction_unlock() do nothing if we hold the allrecord lock. However, the two locks don't overlap, so this is wrong. This simplification makes the transaction lock a straight-forward nested lock. There are two callers for these functions: 1) The transaction code, which already makes sure the allrecord_lock isn't held. 2) The traverse code, which wants to stop transactions whether it has the allrecord lock or not. There have been deadlocks here before, however this should not bring them back (I hope!) Signed-off-by: Rusty Russell --- diff --git a/ccan/tdb/lock.c b/ccan/tdb/lock.c index e3759a3f..66cfcbde 100644 --- a/ccan/tdb/lock.c +++ b/ccan/tdb/lock.c @@ -420,9 +420,6 @@ int tdb_unlock(struct tdb_context *tdb, int list, int ltype) */ int tdb_transaction_lock(struct tdb_context *tdb, int ltype) { - if (tdb->allrecord_lock.count) { - return 0; - } if (tdb->transaction_lock_count > 0) { tdb->transaction_lock_count++; return 0; @@ -443,9 +440,6 @@ int tdb_transaction_lock(struct tdb_context *tdb, int ltype) int tdb_transaction_unlock(struct tdb_context *tdb, int ltype) { int ret; - if (tdb->allrecord_lock.count) { - return 0; - } if (tdb->transaction_lock_count > 1) { tdb->transaction_lock_count--; return 0;