X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Fprivate.h;h=4e7fc8ffeccaba5e2ab13348cf02a23bcbbb15bf;hp=762cdd12442a06ab7370fd3c631d8389b80923dd;hb=a4393df8ed138b853b4ff212db7e1a50aba0b8c7;hpb=41e027e11e0b15100e50c14e49aaa4c2b418f431 diff --git a/ccan/tdb2/private.h b/ccan/tdb2/private.h index 762cdd12..4e7fc8ff 100644 --- a/ccan/tdb2/private.h +++ b/ccan/tdb2/private.h @@ -300,7 +300,8 @@ enum tdb_lock_flags { TDB_LOCK_NOCHECK = 4, }; -struct tdb_lock_type { +struct tdb_lock { + struct tdb_context *owner; uint32_t off; uint32_t count; uint32_t ltype; @@ -319,6 +320,9 @@ struct tdb_file { /* 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; @@ -329,9 +333,9 @@ struct tdb_file { 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; @@ -536,6 +540,9 @@ enum TDB_ERROR tdb_unlock_hashes(struct tdb_context *tdb, 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);