From: Rusty Russell Date: Mon, 22 Feb 2010 04:02:13 +0000 (+1030) Subject: tdb: tdb_allrecord_lock/tdb_allrecord_unlock/tdb_allrecord_upgrade X-Git-Url: http://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=88541fe7eb0542150669312675ddc00e9684de66;hp=88541fe7eb0542150669312675ddc00e9684de66 tdb: tdb_allrecord_lock/tdb_allrecord_unlock/tdb_allrecord_upgrade Centralize locking of all chains of the tdb; rename _tdb_lockall to tdb_allrecord_lock and _tdb_unlockall to tdb_allrecord_unlock, and tdb_brlock_upgrade to tdb_allrecord_upgrade. Then we use this in the transaction code. Unfortunately, if the transaction code records that it has grabbed the allrecord lock read-only, write locks will fail, so we treat this upgradable lock as a write lock, and mark it as upgradable using the otherwise-unused offset field. One subtlety: now the transaction code is using the allrecord_lock, the tdb_release_extra_locks() function drops it for us, so we no longer need to do it manually in _tdb_transaction_cancel. Signed-off-by: Rusty Russell ---