diff options
author | Amitay Isaacs <amitay@gmail.com> | 2012-03-27 09:44:33 +1100 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2012-03-29 20:07:03 +1030 |
commit | 3fdeaa3992bb0599613e20d8e3248c478897531f (patch) | |
tree | 55cb725d21582c13841697c092559e72809b7562 /lib/tdb | |
parent | f74ae3257a2edb9756d9f0442c1314306e936759 (diff) | |
download | samba-3fdeaa3992bb0599613e20d8e3248c478897531f.tar.gz samba-3fdeaa3992bb0599613e20d8e3248c478897531f.tar.bz2 samba-3fdeaa3992bb0599613e20d8e3248c478897531f.zip |
lib/tdb: Add/expose lock functions to support CTDB
This patch adds two lock functions used by CTDB to perform asynchronous
locking. These functions do not actually perform any fcntl operations,
but only increment internal counters.
- tdb_transaction_write_lock_mark()
- tdb_transaction_write_lock_unmark()
It also exposes two internal functions
- tdb_lock_nonblock()
- tdb_unlock()
These functions are NOT exposed in include/tdb.h to prevent any further
uses of these functions. If you ever need to use these functions, consider
using tdb2.
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Diffstat (limited to 'lib/tdb')
-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); +} |