]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/private.h
tdb2: tdb_deq: inline helper for comparing two struct tdb_data
[ccan] / ccan / tdb2 / private.h
index 762cdd12442a06ab7370fd3c631d8389b80923dd..4e7fc8ffeccaba5e2ab13348cf02a23bcbbb15bf 100644 (file)
@@ -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);