]> git.ozlabs.org Git - ccan/commitdiff
tdb: tdb_allrecord_lock/tdb_allrecord_unlock/tdb_allrecord_upgrade
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 22 Feb 2010 04:02:13 +0000 (14:32 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 22 Feb 2010 04:02:13 +0000 (14:32 +1030)
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 <rusty@rustcorp.com.au>

No differences found