summaryrefslogtreecommitdiff
path: root/lib/tdb
diff options
context:
space:
mode:
authorAmitay Isaacs <amitay@gmail.com>2012-03-27 09:44:33 +1100
committerRusty Russell <rusty@rustcorp.com.au>2012-03-29 20:07:03 +1030
commit3fdeaa3992bb0599613e20d8e3248c478897531f (patch)
tree55cb725d21582c13841697c092559e72809b7562 /lib/tdb
parentf74ae3257a2edb9756d9f0442c1314306e936759 (diff)
downloadsamba-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.c18
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);
+}