[asterisk-commits] murf: branch murf/datastructs r72435 - in /team/murf/datastructs: include/ast...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Jun 28 08:51:21 CDT 2007


Author: murf
Date: Thu Jun 28 08:51:21 2007
New Revision: 72435

URL: http://svn.digium.com/view/asterisk?view=rev&rev=72435
Log:
Added user-controlled locking to hashtab

Modified:
    team/murf/datastructs/include/asterisk/hashtab.h
    team/murf/datastructs/main/hashtab.c

Modified: team/murf/datastructs/include/asterisk/hashtab.h
URL: http://svn.digium.com/view/asterisk/team/murf/datastructs/include/asterisk/hashtab.h?view=diff&rev=72435&r1=72434&r2=72435
==============================================================================
--- team/murf/datastructs/include/asterisk/hashtab.h (original)
+++ team/murf/datastructs/include/asterisk/hashtab.h Thu Jun 28 08:51:21 2007
@@ -236,5 +236,14 @@
 /* ------------------ */
 /* ------------------ */
 
+/* user-controlled hashtab locking. Create a hashtab without locking, then call the
+   following locking routines yourself to lock the table between threads. */
+
+void ast_hashtab_initlock(struct ast_hashtab *tab); /* call this after you create the table to init the lock */
+void ast_hashtab_wrlock(struct ast_hashtab *tab); /* request a write-lock on the  table. */
+void ast_hashtab_rdlock(struct ast_hashtab *tab); /* request a read-lock on the table-- don't change anything! */
+void ast_hashtab_unlock(struct ast_hashtab *tab);      /* release a read- or write- lock. */
+void ast_hashtab_destroylock(struct ast_hashtab *tab); /* call this before you destroy the table. */
+
 
 #endif

Modified: team/murf/datastructs/main/hashtab.c
URL: http://svn.digium.com/view/asterisk/team/murf/datastructs/main/hashtab.c?view=diff&rev=72435&r1=72434&r2=72435
==============================================================================
--- team/murf/datastructs/main/hashtab.c (original)
+++ team/murf/datastructs/main/hashtab.c Thu Jun 28 08:51:21 2007
@@ -273,6 +273,35 @@
 	}
 }
 
+/* user-controlled hashtab locking. Create a hashtab without locking, then call the
+   following locking routines yourself to lock the table between threads. */
+
+void ast_hashtab_wrlock(struct ast_hashtab *tab)
+{
+	ast_rwlock_wrlock(&tab->lock);
+}
+
+void ast_hashtab_rdlock(struct ast_hashtab *tab)
+{
+	ast_rwlock_rdlock(&tab->lock);
+}
+
+void ast_hashtab_initlock(struct ast_hashtab *tab)
+{
+	ast_rwlock_init(&tab->lock);
+}
+
+void ast_hashtab_destroylock(struct ast_hashtab *tab)
+{
+	ast_rwlock_destroy(&tab->lock);
+}
+
+void ast_hashtab_unlock(struct ast_hashtab *tab)
+{
+	ast_rwlock_unlock(&tab->lock);
+}
+
+
 void ast_hashtab_destroy( struct ast_hashtab *tab)
 {
 	/* this func will free the hash table and all its memory. It
@@ -392,7 +421,7 @@
 	   it is not there. */
 	/* will force a resize if the resize func returns 1 */
 	/* returns 1 on success, 0 if there's a problem, or it's already there. */
-	int bucket;
+	int bucket = 0;
 	if (tab->do_locking)
 		ast_rwlock_wrlock(&tab->lock);
 




More information about the asterisk-commits mailing list