Browse Source

tdb: cleanup: tdb_release_extra_locks() helper

Move locking intelligence back into lock.c.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Rusty Russell 16 years ago
parent
commit
c730c0d289
3 changed files with 22 additions and 17 deletions
  1. 20 0
      ccan/tdb/lock.c
  2. 1 0
      ccan/tdb/tdb_private.h
  3. 1 17
      ccan/tdb/transaction.c

+ 20 - 0
ccan/tdb/lock.c

@@ -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);
+}

+ 1 - 0
ccan/tdb/tdb_private.h

@@ -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);

+ 1 - 17
ccan/tdb/transaction.c

@@ -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;