Commit c730c0d2 authored by Rusty Russell's avatar Rusty Russell

tdb: cleanup: tdb_release_extra_locks() helper

Move locking intelligence back into lock.c.
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent d92b8a7d
......@@ -702,3 +702,23 @@ bool tdb_have_extra_locks(struct tdb_context *tdb)
}
return false;
}
/* The transaction code uses this to remove all locks. */
void tdb_release_extra_locks(struct tdb_context *tdb)
{
unsigned int i;
if (tdb->allrecord_lock.count != 0) {
tdb_brunlock(tdb, tdb->allrecord_lock.ltype,
FREELIST_TOP, 4*tdb->header.hash_size);
tdb->allrecord_lock.count = 0;
}
for (i=0;i<tdb->num_lockrecs;i++) {
tdb_brunlock(tdb, tdb->lockrecs[i].ltype,
tdb->lockrecs[i].off, 1);
}
tdb->num_locks = 0;
tdb->num_lockrecs = 0;
SAFE_FREE(tdb->lockrecs);
}
......@@ -267,6 +267,7 @@ int tdb_brlock(struct tdb_context *tdb,
int tdb_brunlock(struct tdb_context *tdb,
int rw_type, tdb_off_t offset, size_t len);
bool tdb_have_extra_locks(struct tdb_context *tdb);
void tdb_release_extra_locks(struct tdb_context *tdb);
int tdb_transaction_lock(struct tdb_context *tdb, int ltype);
int tdb_transaction_unlock(struct tdb_context *tdb, int ltype);
int tdb_brlock_upgrade(struct tdb_context *tdb, tdb_off_t offset, size_t len);
......
......@@ -509,23 +509,7 @@ int _tdb_transaction_cancel(struct tdb_context *tdb, int ltype)
tdb->transaction->open_lock_taken = false;
}
/* remove any global lock created during the transaction */
if (tdb->allrecord_lock.count != 0) {
tdb_brunlock(tdb, tdb->allrecord_lock.ltype,
FREELIST_TOP, 4*tdb->header.hash_size);
tdb->allrecord_lock.count = 0;
}
/* remove any locks created during the transaction */
if (tdb->num_locks != 0) {
for (i=0;i<tdb->num_lockrecs;i++) {
tdb_brunlock(tdb, tdb->lockrecs[i].ltype,
tdb->lockrecs[i].off, 1);
}
tdb->num_locks = 0;
tdb->num_lockrecs = 0;
SAFE_FREE(tdb->lockrecs);
}
tdb_release_extra_locks(tdb);
/* restore the normal io methods */
tdb->methods = tdb->transaction->io_methods;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment