]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb/tdb_private.h
tdb: use tdb_nest_lock() for transaction lock.
[ccan] / ccan / tdb / tdb_private.h
index 975892ec2d1bfd6637153973955a207f14c4d741..4214b261bc60b605bfa9babbf1162401ee012d51 100644 (file)
@@ -183,7 +183,7 @@ struct tdb_header {
 };
 
 struct tdb_lock_type {
-       int list;
+       uint32_t off;
        uint32_t count;
        uint32_t ltype;
 };
@@ -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 */
-       struct tdb_lock_type global_lock;
+       struct tdb_lock_type allrecord_lock;
        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 */
@@ -241,7 +241,6 @@ struct tdb_context {
        struct tdb_transaction *transaction;
        int page_size;
        int max_dead_records;
-       int transaction_lock_count;
 #ifdef TDB_TRACE
        int tracefd;
 #endif
@@ -256,12 +255,18 @@ int tdb_munmap(struct tdb_context *tdb);
 void tdb_mmap(struct tdb_context *tdb);
 int tdb_lock(struct tdb_context *tdb, int list, int ltype);
 int tdb_lock_nonblock(struct tdb_context *tdb, int list, int ltype);
+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);
 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_brlock_upgrade(struct tdb_context *tdb, tdb_off_t offset, size_t len);