[PATCH 05/14] tdb: Introduce tdb_chainlock_read_nonblock()

Kirill Smelkov kirr at landau.phys.spbu.ru
Sun Sep 19 03:53:23 MDT 2010


For consistency with other variants of chain locking. This
(read+nonblock) case was missing...

Cc: 597386 at bugs.debian.org
Signed-off-by: Kirill Smelkov <kirr at landau.phys.spbu.ru>
---
 lib/tdb/common/lock.c  |    7 +++++++
 lib/tdb/include/tdb.h  |    1 +
 lib/tdb/tdb.exports    |    1 +
 lib/tdb/tdb.signatures |    1 +
 4 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/lib/tdb/common/lock.c b/lib/tdb/common/lock.c
index 803feee..a7bdfee 100644
--- a/lib/tdb/common/lock.c
+++ b/lib/tdb/common/lock.c
@@ -751,6 +751,13 @@ int tdb_chainlock_read(struct tdb_context *tdb, TDB_DATA key)
 	return ret;
 }
 
+int tdb_chainlock_read_nonblock(struct tdb_context *tdb, TDB_DATA key)
+{
+	int ret = tdb_lock_nonblock(tdb, BUCKET(tdb->hash_fn(&key)), F_RDLCK);
+	tdb_trace_1rec(tdb, "tdb_chainlock_read_nonblock", key);
+	return ret;
+}
+
 int tdb_chainunlock_read(struct tdb_context *tdb, TDB_DATA key)
 {
 	tdb_trace_1rec(tdb, "tdb_chainunlock_read", key);
diff --git a/lib/tdb/include/tdb.h b/lib/tdb/include/tdb.h
index 050f398..1262d8a 100644
--- a/lib/tdb/include/tdb.h
+++ b/lib/tdb/include/tdb.h
@@ -151,6 +151,7 @@ _PUBLIC_ int tdb_chainlock(struct tdb_context *tdb, TDB_DATA key);
 _PUBLIC_ int tdb_chainlock_nonblock(struct tdb_context *tdb, TDB_DATA key);
 _PUBLIC_ int tdb_chainunlock(struct tdb_context *tdb, TDB_DATA key);
 _PUBLIC_ int tdb_chainlock_read(struct tdb_context *tdb, TDB_DATA key);
+_PUBLIC_ int tdb_chainlock_read_nonblock(struct tdb_context *tdb, TDB_DATA key);
 _PUBLIC_ int tdb_chainunlock_read(struct tdb_context *tdb, TDB_DATA key);
 _PUBLIC_ int tdb_chainlock_mark(struct tdb_context *tdb, TDB_DATA key);
 _PUBLIC_ int tdb_chainlock_unmark(struct tdb_context *tdb, TDB_DATA key);
diff --git a/lib/tdb/tdb.exports b/lib/tdb/tdb.exports
index 73b8fd6..dd3c9c3 100644
--- a/lib/tdb/tdb.exports
+++ b/lib/tdb/tdb.exports
@@ -6,6 +6,7 @@
            tdb_chainlock_mark;
            tdb_chainlock_nonblock;
            tdb_chainlock_read;
+           tdb_chainlock_read_nonblock;
            tdb_chainlock_unmark;
            tdb_chainunlock;
            tdb_chainunlock_read;
diff --git a/lib/tdb/tdb.signatures b/lib/tdb/tdb.signatures
index 7706d18..f7a03e0 100644
--- a/lib/tdb/tdb.signatures
+++ b/lib/tdb/tdb.signatures
@@ -5,6 +5,7 @@ int tdb_append (struct tdb_context *, TDB_DATA, TDB_DATA);
 int tdb_chainlock_mark (struct tdb_context *, TDB_DATA);
 int tdb_chainlock_nonblock (struct tdb_context *, TDB_DATA);
 int tdb_chainlock_read (struct tdb_context *, TDB_DATA);
+int tdb_chainlock_read_nonblock (struct tdb_context *, TDB_DATA);
 int tdb_chainlock (struct tdb_context *, TDB_DATA);
 int tdb_chainlock_unmark (struct tdb_context *, TDB_DATA);
 int tdb_chainunlock_read (struct tdb_context *, TDB_DATA);
-- 
1.7.3.rc2


More information about the samba-technical mailing list