TDB_LOCK_NOCHECK = 4,
};
-struct tdb_lock_type {
+struct tdb_lock {
+ struct tdb_context *owner;
uint32_t off;
uint32_t count;
uint32_t ltype;
/* Single list of all TDBs, to detect multiple opens. */
struct tdb_file *next;
+ /* How many are sharing us? */
+ unsigned int refcnt;
+
/* Mmap (if any), or malloc (for TDB_INTERNAL). */
void *map_ptr;
int fd;
/* Lock information */
- struct tdb_lock_type allrecord_lock;
+ struct tdb_lock allrecord_lock;
size_t num_lockrecs;
- struct tdb_lock_type *lockrecs;
+ struct tdb_lock *lockrecs;
/* Identity of this file. */
dev_t device;
tdb_off_t hash_lock,
tdb_len_t hash_range, int ltype);
+/* For closing the file. */
+void tdb_unlock_all(struct tdb_context *tdb);
+
/* Lock/unlock a particular free bucket. */
enum TDB_ERROR tdb_lock_free_bucket(struct tdb_context *tdb, tdb_off_t b_off,
enum tdb_lock_flags waitflag);