diff options
-rw-r--r-- | lib/tdb/common/lock.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/tdb/common/lock.c b/lib/tdb/common/lock.c index c6a2485171..88a52e9dfa 100644 --- a/lib/tdb/common/lock.c +++ b/lib/tdb/common/lock.c @@ -380,7 +380,7 @@ int tdb_lock(struct tdb_context *tdb, int list, int ltype) } /* lock a list in the database. list -1 is the alloc list. non-blocking lock */ -int tdb_lock_nonblock(struct tdb_context *tdb, int list, int ltype) +_PUBLIC_ int tdb_lock_nonblock(struct tdb_context *tdb, int list, int ltype) { return tdb_lock_list(tdb, list, ltype, TDB_LOCK_NOWAIT); } @@ -445,7 +445,7 @@ int tdb_nest_unlock(struct tdb_context *tdb, uint32_t offset, int ltype, return ret; } -int tdb_unlock(struct tdb_context *tdb, int list, int ltype) +_PUBLIC_ int tdb_unlock(struct tdb_context *tdb, int list, int ltype) { /* a global lock allows us to avoid per chain locks */ if (tdb->allrecord_lock.count && @@ -859,3 +859,17 @@ void tdb_release_transaction_locks(struct tdb_context *tdb) SAFE_FREE(tdb->lockrecs); } } + +/* Following functions are added specifically to support CTDB. */ + +/* Don't do actual fcntl locking, just mark tdb locked */ +_PUBLIC_ int tdb_transaction_write_lock_mark(struct tdb_context *tdb) +{ + return tdb_transaction_lock(tdb, F_WRLCK, TDB_LOCK_MARK_ONLY); +} + +/* Don't do actual fcntl unlocking, just mark tdb unlocked */ +_PUBLIC_ int tdb_transaction_write_lock_unmark(struct tdb_context *tdb) +{ + return tdb_nest_unlock(tdb, TRANSACTION_LOCK, F_WRLCK, true); +} |