svn commit: samba r22422 - in branches/SAMBA_4_0/source/lib/tdb: . common include tools

tridge at samba.org tridge at samba.org
Sat Apr 21 07:25:42 GMT 2007


Author: tridge
Date: 2007-04-21 07:25:40 +0000 (Sat, 21 Apr 2007)
New Revision: 22422

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=22422

Log:

merged tdb changes from ctdb

Modified:
   branches/SAMBA_4_0/source/lib/tdb/autogen.sh
   branches/SAMBA_4_0/source/lib/tdb/common/lock.c
   branches/SAMBA_4_0/source/lib/tdb/common/tdb_private.h
   branches/SAMBA_4_0/source/lib/tdb/include/tdb.h
   branches/SAMBA_4_0/source/lib/tdb/tools/tdbtest.c


Changeset:
Modified: branches/SAMBA_4_0/source/lib/tdb/autogen.sh
===================================================================
--- branches/SAMBA_4_0/source/lib/tdb/autogen.sh	2007-04-21 07:23:42 UTC (rev 22421)
+++ branches/SAMBA_4_0/source/lib/tdb/autogen.sh	2007-04-21 07:25:40 UTC (rev 22422)
@@ -3,7 +3,7 @@
 rm -rf autom4te.cache
 rm -f configure config.h.in
 
-IPATHS="-I libreplace -I lib/replace -I ../libreplace -I ../replace"
+IPATHS="-I libreplace -I lib/replace -I ../libreplace -I ../replace -I ../lib/replace"
 autoconf $IPATHS || exit 1
 autoheader $IPATHS || exit 1
 

Modified: branches/SAMBA_4_0/source/lib/tdb/common/lock.c
===================================================================
--- branches/SAMBA_4_0/source/lib/tdb/common/lock.c	2007-04-21 07:23:42 UTC (rev 22421)
+++ branches/SAMBA_4_0/source/lib/tdb/common/lock.c	2007-04-21 07:25:40 UTC (rev 22422)
@@ -105,7 +105,7 @@
 
 
 /* lock a list in the database. list -1 is the alloc list */
-int tdb_lock(struct tdb_context *tdb, int list, int ltype)
+static int _tdb_lock(struct tdb_context *tdb, int list, int ltype, int op)
 {
 	struct tdb_lock_type *new_lck;
 	int i;
@@ -158,10 +158,8 @@
 
 	/* Since fcntl locks don't nest, we do a lock for the first one,
 	   and simply bump the count for future ones */
-	if (tdb->methods->tdb_brlock(tdb,FREELIST_TOP+4*list,ltype,F_SETLKW,
+	if (tdb->methods->tdb_brlock(tdb,FREELIST_TOP+4*list,ltype, op,
 				     0, 1)) {
-		TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_lock failed on list %d "
-			 "ltype=%d (%s)\n",  list, ltype, strerror(errno)));
 		return -1;
 	}
 
@@ -175,6 +173,25 @@
 	return 0;
 }
 
+/* lock a list in the database. list -1 is the alloc list */
+int tdb_lock(struct tdb_context *tdb, int list, int ltype)
+{
+	int ret;
+	ret = _tdb_lock(tdb, list, ltype, F_SETLKW);
+	if (ret) {
+		TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_lock failed on list %d "
+			 "ltype=%d (%s)\n",  list, ltype, strerror(errno)));
+	}
+	return ret;
+}
+
+/* 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)
+{
+	return _tdb_lock(tdb, list, ltype, F_SETLK);
+}
+
+
 /* unlock the database: returns void because it's too late for errors. */
 	/* changed to return int it may be interesting to know there
 	   has been an error  --simo */
@@ -351,6 +368,14 @@
 	return tdb_lock(tdb, BUCKET(tdb->hash_fn(&key)), F_WRLCK);
 }
 
+/* lock/unlock one hash chain, non-blocking. This is meant to be used
+   to reduce contention - it cannot guarantee how many records will be
+   locked */
+int tdb_chainlock_nonblock(struct tdb_context *tdb, TDB_DATA key)
+{
+	return tdb_lock_nonblock(tdb, BUCKET(tdb->hash_fn(&key)), F_WRLCK);
+}
+
 int tdb_chainunlock(struct tdb_context *tdb, TDB_DATA key)
 {
 	return tdb_unlock(tdb, BUCKET(tdb->hash_fn(&key)), F_WRLCK);

Modified: branches/SAMBA_4_0/source/lib/tdb/common/tdb_private.h
===================================================================
--- branches/SAMBA_4_0/source/lib/tdb/common/tdb_private.h	2007-04-21 07:23:42 UTC (rev 22421)
+++ branches/SAMBA_4_0/source/lib/tdb/common/tdb_private.h	2007-04-21 07:25:40 UTC (rev 22422)
@@ -206,7 +206,7 @@
 			   struct list_struct *rec);
 void tdb_io_init(struct tdb_context *tdb);
 int tdb_expand(struct tdb_context *tdb, tdb_off_t size);
-int tdb_rec_free_read(struct tdb_context *tdb, tdb_off_t off,
-		      struct list_struct *rec);
+int rec_free_read(struct tdb_context *tdb, tdb_off_t off,
+		  struct list_struct *rec);
 
 

Modified: branches/SAMBA_4_0/source/lib/tdb/include/tdb.h
===================================================================
--- branches/SAMBA_4_0/source/lib/tdb/include/tdb.h	2007-04-21 07:23:42 UTC (rev 22421)
+++ branches/SAMBA_4_0/source/lib/tdb/include/tdb.h	2007-04-21 07:25:40 UTC (rev 22422)
@@ -134,6 +134,7 @@
 
 /* Low level locking functions: use with care */
 int tdb_chainlock(struct tdb_context *tdb, TDB_DATA key);
+int tdb_chainlock_nonblock(struct tdb_context *tdb, TDB_DATA key);
 int tdb_chainunlock(struct tdb_context *tdb, TDB_DATA key);
 int tdb_chainlock_read(struct tdb_context *tdb, TDB_DATA key);
 int tdb_chainunlock_read(struct tdb_context *tdb, TDB_DATA key);

Modified: branches/SAMBA_4_0/source/lib/tdb/tools/tdbtest.c
===================================================================
--- branches/SAMBA_4_0/source/lib/tdb/tools/tdbtest.c	2007-04-21 07:23:42 UTC (rev 22421)
+++ branches/SAMBA_4_0/source/lib/tdb/tools/tdbtest.c	2007-04-21 07:25:40 UTC (rev 22422)
@@ -214,7 +214,7 @@
 	key.dptr = keys[3];
 	tdb_delete(db, key);
 }
-	
+
  int main(int argc, const char *argv[])
 {
 	int i, seed=0;



More information about the samba-cvs mailing list