/* Uses traverse lock: 0 = finish, TDB_NEXT_LOCK_ERR = error,
other = record offset */
static tdb_off_t tdb_next_lock(struct tdb_context *tdb, struct tdb_traverse_lock *tlock,
- struct list_struct *rec)
+ struct tdb_record *rec)
{
int want_next = (tlock->off != 0);
/* Lock each chain from the start one. */
for (; tlock->hash < tdb->header.hash_size; tlock->hash++) {
if (!tlock->off && tlock->hash != 0) {
- /* this is an optimisation for the common case where
+ /* this is an optimization for the common case where
the hash chain is empty, which is particularly
common for the use of tdb with ldb, where large
hashes are used. In that case we spend most of our
lock, so instead we get the lock and re-fetch the
value below.
- Notice that not doing this optimisation on the
+ Notice that not doing this optimization on the
first hash chain is critical. We must guarantee
that we have done at least one fcntl lock at the
start of a search to guarantee that memory is
if fn is NULL then it is not called
a non-zero return value from fn() indicates that the traversal should stop
*/
-static int _tdb_traverse(struct tdb_context *tdb,
- tdb_traverse_func fn, void *private_data,
- struct tdb_traverse_lock *tl)
+static int tdb_traverse_internal(struct tdb_context *tdb,
+ tdb_traverse_func fn, void *private_data,
+ struct tdb_traverse_lock *tl)
{
TDB_DATA key, dbuf;
- struct list_struct rec;
+ struct tdb_record rec;
int ret = 0, count = 0;
tdb_off_t off;
tdb->traverse_read++;
tdb_trace(tdb, "tdb_traverse_read_start");
- ret = _tdb_traverse(tdb, fn, private_data, &tl);
+ ret = tdb_traverse_internal(tdb, fn, private_data, &tl);
tdb->traverse_read--;
- tdb_transaction_unlock(tdb);
+ tdb_transaction_unlock(tdb, F_RDLCK);
return ret;
}
tdb->traverse_write++;
tdb_trace(tdb, "tdb_traverse_start");
- ret = _tdb_traverse(tdb, fn, private_data, &tl);
+ ret = tdb_traverse_internal(tdb, fn, private_data, &tl);
tdb->traverse_write--;
- tdb_transaction_unlock(tdb);
+ tdb_transaction_unlock(tdb, F_WRLCK);
return ret;
}
TDB_DATA tdb_firstkey(struct tdb_context *tdb)
{
TDB_DATA key;
- struct list_struct rec;
+ struct tdb_record rec;
tdb_off_t off;
/* release any old lock */
{
uint32_t oldhash;
TDB_DATA key = tdb_null;
- struct list_struct rec;
+ struct tdb_record rec;
unsigned char *k = NULL;
tdb_off_t off;