tdb: tdb_allrecord_lock/tdb_allrecord_unlock/tdb_allrecord_upgrade
[ccan] / ccan / tdb / tdb_private.h
index 33445fc5a14072d16c7f92d07ee806490c68ebaa..52383287a067605f790200562d72cf151b34cef9 100644 (file)
@@ -223,7 +223,7 @@ struct tdb_context {
        int read_only; /* opened read-only */
        int traverse_read; /* read-only traversal */
        int traverse_write; /* read-write traversal */
        int read_only; /* opened read-only */
        int traverse_read; /* read-only traversal */
        int traverse_write; /* read-write traversal */
-       struct tdb_lock_type allrecord_lock;
+       struct tdb_lock_type allrecord_lock; /* .offset == upgradable */
        int num_lockrecs;
        struct tdb_lock_type *lockrecs; /* only real locks, all with count>0 */
        enum TDB_ERROR ecode; /* error code for last tdb error */
        int num_lockrecs;
        struct tdb_lock_type *lockrecs; /* only real locks, all with count>0 */
        enum TDB_ERROR ecode; /* error code for last tdb error */
@@ -236,12 +236,10 @@ struct tdb_context {
        struct tdb_logging_context log;
        unsigned int (*hash_fn)(TDB_DATA *key);
        int open_flags; /* flags used in the open - needed by reopen */
        struct tdb_logging_context log;
        unsigned int (*hash_fn)(TDB_DATA *key);
        int open_flags; /* flags used in the open - needed by reopen */
-       unsigned int num_locks; /* number of chain locks held */
        const struct tdb_methods *methods;
        struct tdb_transaction *transaction;
        int page_size;
        int max_dead_records;
        const struct tdb_methods *methods;
        struct tdb_transaction *transaction;
        int page_size;
        int max_dead_records;
-       int transaction_lock_count;
 #ifdef TDB_TRACE
        int tracefd;
 #endif
 #ifdef TDB_TRACE
        int tracefd;
 #endif
@@ -260,15 +258,21 @@ int tdb_nest_lock(struct tdb_context *tdb, uint32_t offset, int ltype,
                  enum tdb_lock_flags flags);
 int tdb_nest_unlock(struct tdb_context *tdb, uint32_t offset, int ltype,
                    bool mark_lock);
                  enum tdb_lock_flags flags);
 int tdb_nest_unlock(struct tdb_context *tdb, uint32_t offset, int ltype,
                    bool mark_lock);
+bool tdb_have_locks(struct tdb_context *tdb);
 int tdb_unlock(struct tdb_context *tdb, int list, int ltype);
 int tdb_brlock(struct tdb_context *tdb,
               int rw_type, tdb_off_t offset, size_t len,
               enum tdb_lock_flags flags);
 int tdb_brunlock(struct tdb_context *tdb,
                 int rw_type, tdb_off_t offset, size_t len);
 int tdb_unlock(struct tdb_context *tdb, int list, int ltype);
 int tdb_brlock(struct tdb_context *tdb,
               int rw_type, tdb_off_t offset, size_t len,
               enum tdb_lock_flags flags);
 int tdb_brunlock(struct tdb_context *tdb,
                 int rw_type, tdb_off_t offset, size_t len);
+bool tdb_have_extra_locks(struct tdb_context *tdb);
+void tdb_release_extra_locks(struct tdb_context *tdb);
 int tdb_transaction_lock(struct tdb_context *tdb, int ltype);
 int tdb_transaction_unlock(struct tdb_context *tdb, int ltype);
 int tdb_transaction_lock(struct tdb_context *tdb, int ltype);
 int tdb_transaction_unlock(struct tdb_context *tdb, int ltype);
-int tdb_brlock_upgrade(struct tdb_context *tdb, tdb_off_t offset, size_t len);
+int tdb_allrecord_lock(struct tdb_context *tdb, int ltype,
+                      enum tdb_lock_flags flags, bool upgradable);
+int tdb_allrecord_unlock(struct tdb_context *tdb, int ltype, bool mark_lock);
+int tdb_allrecord_upgrade(struct tdb_context *tdb);
 int tdb_write_lock_record(struct tdb_context *tdb, tdb_off_t off);
 int tdb_write_unlock_record(struct tdb_context *tdb, tdb_off_t off);
 int tdb_ofs_read(struct tdb_context *tdb, tdb_off_t offset, tdb_off_t *d);
 int tdb_write_lock_record(struct tdb_context *tdb, tdb_off_t off);
 int tdb_write_unlock_record(struct tdb_context *tdb, tdb_off_t off);
 int tdb_ofs_read(struct tdb_context *tdb, tdb_off_t offset, tdb_off_t *d);