svn commit: samba r2033 - in trunk/source: smbd tdb

jra at samba.org jra at samba.org
Wed Aug 25 01:04:11 GMT 2004


Author: jra
Date: 2004-08-25 01:04:09 +0000 (Wed, 25 Aug 2004)
New Revision: 2033

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/trunk/source&rev=2033&nolog=1

Log:
If you're selecting a hash algorithm for tdb, you need to do it at open time,
it doesn't make sense anywhere else.
Jeremy.

Modified:
   trunk/source/smbd/statcache.c
   trunk/source/tdb/tdb.c
   trunk/source/tdb/tdb.h
   trunk/source/tdb/tdbutil.c


Changeset:
Modified: trunk/source/smbd/statcache.c
===================================================================
--- trunk/source/smbd/statcache.c	2004-08-25 01:04:02 UTC (rev 2032)
+++ trunk/source/smbd/statcache.c	2004-08-25 01:04:09 UTC (rev 2033)
@@ -2,7 +2,7 @@
    Unix SMB/CIFS implementation.
    stat cache code
    Copyright (C) Andrew Tridgell 1992-2000
-   Copyright (C) Jeremy Allison 1999-2000
+   Copyright (C) Jeremy Allison 1999-2004
    Copyright (C) Andrew Bartlett <abartlet at samba.org> 2003
    
    This program is free software; you can redistribute it and/or modify
@@ -280,16 +280,11 @@
 	}
 }
 
-/*
- **************************************************************
- *      Compute a hash value based on a string key value.
- *      Make the string key into an array of int's if possible.
- *      For the last few chars that cannot be int'ed, use char instead.
- *      The function returns the bucket index number for the hashed
- *      key.
- *      JRA. Use a djb-algorithm hash for speed.
- **************************************************************
- */
+/***************************************************************
+ Compute a hash value based on a string key value.
+ The function returns the bucket index number for the hashed key.
+ JRA. Use a djb-algorithm hash for speed.
+***************************************************************/
                                                                                                      
 static u32 string_hash(TDB_DATA *key)
 {
@@ -301,14 +296,10 @@
         return n;
 }
 
-/*************************************************************************** **
- * Initializes or clears the stat cache.
- *
- *  Input:  none.
- *  Output: none.
- *
- * ************************************************************************** **
- */
+/***************************************************************************
+ Initializes or clears the stat cache.
+**************************************************************************/
+
 BOOL reset_stat_cache( void )
 {
 	if (!lp_stat_cache())
@@ -318,10 +309,11 @@
 		tdb_close(tdb_stat_cache);
 	}
 
-	/* Create the in-memory tdb. */
-	tdb_stat_cache = tdb_open_log("statcache", 0, TDB_INTERNAL, (O_RDWR|O_CREAT), 0644);
+	/* Create the in-memory tdb using our custom hash function. */
+	tdb_stat_cache = tdb_open_ex("statcache", 0, TDB_INTERNAL,
+                                    (O_RDWR|O_CREAT), 0644, NULL, string_hash);
+
 	if (!tdb_stat_cache)
 		return False;
-	tdb_set_hash_function(tdb_stat_cache, string_hash);
 	return True;
 }

Modified: trunk/source/tdb/tdb.c
===================================================================
--- trunk/source/tdb/tdb.c	2004-08-25 01:04:02 UTC (rev 2032)
+++ trunk/source/tdb/tdb.c	2004-08-25 01:04:09 UTC (rev 2033)
@@ -1689,11 +1689,6 @@
 	return (1103515243 * value + 12345);  
 }
 
-void tdb_set_hash_function(TDB_CONTEXT *tdb, tdb_hash_func fn)
-{
-	tdb->hash_fn = fn;
-}
-
 /* open the database, creating it if necessary 
 
    The open_flags and mode are passed straight to the open call on the
@@ -1707,13 +1702,14 @@
 TDB_CONTEXT *tdb_open(const char *name, int hash_size, int tdb_flags,
 		      int open_flags, mode_t mode)
 {
-	return tdb_open_ex(name, hash_size, tdb_flags, open_flags, mode, NULL);
+	return tdb_open_ex(name, hash_size, tdb_flags, open_flags, mode, NULL, NULL);
 }
 
 
 TDB_CONTEXT *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
 			 int open_flags, mode_t mode,
-			 tdb_log_func log_fn)
+			 tdb_log_func log_fn,
+			 tdb_hash_func hash_fn)
 {
 	TDB_CONTEXT *tdb;
 	struct stat st;
@@ -1733,7 +1729,7 @@
 	tdb->flags = tdb_flags;
 	tdb->open_flags = open_flags;
 	tdb->log_fn = log_fn;
-	tdb->hash_fn = default_tdb_hash;
+	tdb->hash_fn = hash_fn ? hash_fn : default_tdb_hash;
 
 	if ((open_flags & O_ACCMODE) == O_WRONLY) {
 		TDB_LOG((tdb, 0, "tdb_open_ex: can't open tdb %s write-only\n",

Modified: trunk/source/tdb/tdb.h
===================================================================
--- trunk/source/tdb/tdb.h	2004-08-25 01:04:02 UTC (rev 2032)
+++ trunk/source/tdb/tdb.h	2004-08-25 01:04:09 UTC (rev 2033)
@@ -114,12 +114,12 @@
 		      int open_flags, mode_t mode);
 TDB_CONTEXT *tdb_open_ex(const char *name, int hash_size, int tdb_flags,
 			 int open_flags, mode_t mode,
-			 tdb_log_func log_fn);
+			 tdb_log_func log_fn,
+			 tdb_hash_func hash_fn);
 
 int tdb_reopen(TDB_CONTEXT *tdb);
 int tdb_reopen_all(void);
 void tdb_logging_function(TDB_CONTEXT *tdb, tdb_log_func);
-void tdb_set_hash_function(TDB_CONTEXT *tdb, tdb_hash_func);
 enum TDB_ERROR tdb_error(TDB_CONTEXT *tdb);
 const char *tdb_errorstr(TDB_CONTEXT *tdb);
 TDB_DATA tdb_fetch(TDB_CONTEXT *tdb, TDB_DATA key);

Modified: trunk/source/tdb/tdbutil.c
===================================================================
--- trunk/source/tdb/tdbutil.c	2004-08-25 01:04:02 UTC (rev 2032)
+++ trunk/source/tdb/tdbutil.c	2004-08-25 01:04:09 UTC (rev 2033)
@@ -826,7 +826,7 @@
 		tdb_flags |= TDB_NOMMAP;
 
 	tdb = tdb_open_ex(name, hash_size, tdb_flags, 
-				    open_flags, mode, tdb_log);
+				    open_flags, mode, tdb_log, NULL);
 	if (!tdb)
 		return NULL;
 



More information about the samba-cvs mailing list