- int64_t ret;
- bool was_ro = tdb->read_only;
- tdb->read_only = true;
- ret = traverse(tdb, F_RDLCK, fn, p);
- tdb->read_only = was_ro;
- return ret;
+ struct traverse_info tinfo;
+ struct hash_info h;
+ struct tdb_used_record rec;
+
+ tinfo.prev = find_and_lock(tdb, *key, F_RDLCK, &h, &rec, &tinfo);
+ free(key->dptr);
+ if (TDB_OFF_IS_ERR(tinfo.prev)) {
+ return tinfo.prev;
+ }
+ tdb_unlock_hashes(tdb, h.hlock_start, h.hlock_range, F_RDLCK);
+
+ return next_in_hash(tdb, &tinfo, key, NULL);